python - 我想使用正则表达式拆分文件的扩展名
问题描述
item 是一个类似 "./test/test1.csv" 的字符串。我想将项目更改为“test1”。我写了代码,
item=re.search('./*.csv',item)
但是,“1.csv”是项目。我真的不明白为什么会发生这样的事情。我应该怎么做才能做我理想的事情?
解决方案
通常,您需要标准库中的os.path模块来获取这种文件名。
import os.path
print(os.path.splitext(os.path.basename('./test/test1.csv'))[0])
在您的正则表达式版本中,请记住.
匹配任何字符(不仅仅是句点),x*
匹配任意数量的 x(甚至为零),如果模式匹配字符串中的任何位置,re.search将返回 true:您的正则表达式匹配每当文件名在第一个或第二个字符之后的任何位置包含字母“csv”时。正确的正则表达式实现可能是
import re
print(re.search(r'/([^/.]+)\.[^/]+$', './test/test1.csv')[1])
(匹配斜杠、至少一个既不是句点也不是斜杠的字符、句点、至少一个不是斜杠的字符和字符串的结尾)。(恕我直言os.path
,更具可读性和可维护性。)
推荐阅读
- node.js - 如何使用 React 中的值传递图像文件和对象并在 Node.js (express) 服务器上检索它?
- python - 在 Windows 中使用 python 获取重启历史
- r - 由于未能安装依赖包,使用 travis CI 开发 R 包会出错
- php - 在 cron 中作为 shell 命令执行 laravel 命令
- java - 无法解决:com.android.support:cardview-v7:24.2.0
- c++ - 如何在 MacOS 和 Linux Ubuntu 20.04 上静态编译 tesseract 库?
- laravel - 我们在生产(Web)服务器上不需要 Laravel 的哪些文件夹和文件?
- firebase - 无法在 Flutter 中集成 Firebase - MissingPluginException
- r - 3个日期之间的间隔,ifelse有3个选项
- python-3.x - 在 a, b = 1, 2 期间如何使用内存?