你可以做一个简单的re.sub
到.txt
替换为空字符串。
import re, glob
f = glob.glob('/fulldirectory/*.txt')
for file in f:
print(re.sub('\.txt$', '', file))
r = open(file)
reader = csv.DictReader(r)
在一个理想世界我将打印“索引”,并在第一次迭代中,R01将被打印。然后R02等
如果你喜欢他们总是在秩序,做到这一点,而不是先排序的文件名:
f = sorted(glob.glob('/fulldirectory/*.txt'))
如果你只想打印文件的基本名称,可以改为打印:
import os
print(re.sub('\.txt$', '', os.path.basename(file)))
注:建议可能不是很安全的另一种方式,因为它不建议在文件名中使用多个拆分。
这里是一个体面的解释一个完整的例子是,OP要求:
import re, os, glob
file_list = glob.glob('/fulldirectory/*.txt') # get the list of file names that ends in .txt
f = sorted(file_list, key = lambda x: int(re.findall('\d+\.txt$',os.path.basename(x))[0]))
# 1 2 3 8 4 5 6 7
for file in f:
print(re.sub('\.txt$', '', file))
# 9
# do your stuff....
的sorted()
功能是用来排序的文件名列表,然后将其存储到F(f是排序版本file_list中)的
key
的说法是,接受一个参数,并输出可排序的对象(即str
,int
,list
...),它是一个函数用来定义它与
拉姆达排序的关键是接受的说法“X”匿名函数,这个作品以同样的方式作为def NoName(x): return something
使用re.findall
地发现,正则表达式匹配所有子中,这种情况下,应该只有一个匹配[即。'abc123.txt'
将返回[123]
]
'\d+\.txt$'
是一个正则表达式,\d+
- 任意数量的重复一次或多次,\.
是一个规则的点.
在前面那里有一个\
因为通常在正则表达式,一个.
具有它所代表的特殊含义任何字符,\
转义它,使其只有一个规则.
,txt
是一个字符串匹配在该给定的位置,而$
是指示它只匹配在该字符串的结尾符号。
os.path.basename()
用于检索基本名称
因为re.findall()
(路径[即'abc123.txt'
的'\a\b\c\abc123.txt'
]的最后部分)总是返回一个列表,以便检索仅匹配将涉及使用[0] (即['123',][0]
=>'123'
)
因为检索到的数据是一个字符串,必须使用INT()把它更改为int
,用于比较。 int是在#2中传递给key
的内容。
re.sub('\.txt$', '', file)
第一个参数是一个正则表达式,第二个参数是将它替换为字符串,第三个参数是需要更换(即re.sub('a', '', 'banana')
=>bnn
因为它取代每a
什么也没有)检查#字符串5有关正则表达式的更多信息
如果您需要任何更多的澄清,告诉我
进口的另一种方法是这样的:
import glob
from re import sub, findall
from os.path import basename
file_list = glob.glob('/fulldirectory/*.txt') # get the list of file names that ends in .txt
f = sorted(file_list, key = lambda x: int(findall('\d+\.txt$',basename(x))[0]))
for file in f:
print(sub('\.txt$', '', file))
# do your stuff....
有用的链接:
https://docs.python.org/3/library/re.html
https://docs.python.org/3/library/os.path.html
https://docs.python.org/3/tutorial/
感谢。我结束了使用一个方法,从目录中取出数字并将它们保存到列表中。这是有效的 - 但它只在目录中没有其他数字的情况下才起作用,这并不理想。尽管如此,我将转向你的方法。我不完全理解它是如何工作的。 –
你能解释一下basename方法吗?我不完全确定这些代码实际上在做什么。 –
提示:排序方法有一个关键参数,您可以在其中传递一个函数来告诉它如何排序,如果您只想对最后两个数字进行排序,您可以这样做:'f = sorted(glob.glob(' /fulldirectory/*.txt'),key=lambda x:os.path.basename(x).rstrip(“.txt”)[ - 2:])' – abccd