item是类似于“ ./test/test1.csv”的字符串。 我想将项目更改为“ test1”。 我写了代码,
item=re.search('./*.csv',item)
但是,“ 1.csv”是项目。我真的不明白为什么会发生这种事情。我应该怎么做才能做我理想的事情?
答案 0 :(得分:1)
通常,您希望标准库中的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
更具可读性和可维护性。)
答案 1 :(得分:1)
作为正则表达式,'./*.csv'
并不意味着您认为的那样。 .
的意思是“任何字符”,而*
的意思是“之前的零个或多个字符”,因此,它不是“点,斜杠,任何字符串,点,csv”,而是“任何字符” ,一些斜线,任何字符csv”。
如果您真的想使用正则表达式,则可以尝试使用此方法(在许多其他变体中):
>>> re.search(r"([^/]+)\.[^\.]+$", p).group(1)
'test1'
或者仅使用str.split
和rsplit
:
>>> p.rsplit("/", 1)[-1].split(".")[0]
'test1'
或者,由于您正在处理文件路径,因此os.path
怎么样?
>>> os.path.splitext(os.path.split(p)[1])[0]
'test1'
答案 2 :(得分:-1)
这将起作用
import ntpath
path = ".../test/test1.csv"
file_name = ntpath.basename(path)