Python 打印文件名
因此,我试图打印出一个文件的实际名称,作为我分析的一部分 上面目录中的每个文件都使用此约定命名:R1.txt、R2.txt、R3.txt等 目前,我只是简单地使用enumerate函数来打印数字——但这只是在假定目录中没有文件丢失的情况下才起作用 编辑: 我试过这个,但它没有给我想要的:Python 打印文件名,python,Python,因此,我试图打印出一个文件的实际名称,作为我分析的一部分 上面目录中的每个文件都使用此约定命名:R1.txt、R2.txt、R3.txt等 目前,我只是简单地使用enumerate函数来打印数字——但这只是在假定目录中没有文件丢失的情况下才起作用 编辑: 我试过这个,但它没有给我想要的: f = glob.glob('/fulldirectory/*.txt') for index, files in enumerate(f, 1): r = open(files) reade
f = glob.glob('/fulldirectory/*.txt')
for index, files in enumerate(f, 1):
r = open(files)
reader = csv.DictReader(r)
只需执行一个简单的
re.sub
即可将.txt
替换为空字符串
p = [int(s) for s in files if files.isdigit()]
print p
>[0,1]
>[0,2]
在理想情况下,我会打印“索引”,在第一次迭代中,会打印R01。然后是R02等等
如果您希望它们始终保持有序,请改为先对文件名进行排序:
import re, glob
f = glob.glob('/fulldirectory/*.txt')
for file in f:
print(re.sub('\.txt$', '', file))
r = open(file)
reader = csv.DictReader(r)
如果您只想打印文件的基本名称,可以改为打印:
f = sorted(glob.glob('/fulldirectory/*.txt'))
注意:建议的另一种方法可能不太安全,因为不建议对文件名使用多个拆分
以下是OP要求的一个完整示例,并给出了合理的解释:
import os
print(re.sub('\.txt$', '', os.path.basename(file)))
sorted()
函数用于对文件名列表进行排序,然后将其存储到f中(f是文件列表的排序版本)key
参数是一个函数,它接受一个参数并输出一个可排序对象(即str
,int
,list
…),用于定义其排序的键def NoName(x)相同:返回某些内容
re.findall
查找与正则表达式匹配的所有子字符串,在这种情况下,应该只有一个匹配项[即'abc123.txt'
将返回[123]
]'\d+\.txt$'
是一个正则表达式,\d+
-任何重复一次或多次的数字,\。
是一个规则点
前面有一个\
,因为通常在正则表达式中,
具有代表任何字符的特殊含义,
转义,将其仅设为常规的
,txt
是要在给定位置匹配的字符串,$
是指示其仅在字符串末尾匹配的符号os.path.basename()
用于检索basename(路径的最后部分[即'\a\b\c\abc123.txt'
]的'abc123.txt'
)re.findall()
始终返回一个列表,因此检索唯一匹配项需要使用[0](即['123',][0]
=>'123'
)int
,以便进行比较。int是传递给#2中的键的值
re.sub('\.txt$,'',file)
第一个参数是正则表达式,第二个参数是要替换它的字符串,第三个参数是需要替换的字符串(即,re.sub('a','','banana')
=>bnn
,因为它用零替换每个a
)有关正则表达式的更多信息,请查看#5import 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....
有用链接:
您只需执行一个简单的
re.sub
即可将.txt
替换为空字符串
p = [int(s) for s in files if files.isdigit()]
print p
>[0,1]
>[0,2]
在理想情况下,我会打印“索引”,在第一次迭代中,会打印R01。然后是R02等等
如果您希望它们始终保持有序,请改为先对文件名进行排序:
import re, glob
f = glob.glob('/fulldirectory/*.txt')
for file in f:
print(re.sub('\.txt$', '', file))
r = open(file)
reader = csv.DictReader(r)
如果您只想打印文件的基本名称,可以改为打印:
f = sorted(glob.glob('/fulldirectory/*.txt'))
注意:建议的另一种方法可能不太安全,因为不建议对文件名使用多个拆分
以下是OP要求的一个完整示例,并给出了合理的解释:
import os
print(re.sub('\.txt$', '', os.path.basename(file)))
sorted()
函数用于对文件名列表进行排序,然后将其存储到f中(f是文件列表的排序版本)key
参数是一个函数,它接受一个参数并输出一个可排序对象(即str
,int
,list
…),用于定义其排序的键def NoName(x)相同:返回某些内容
re.findall
查找与正则表达式匹配的所有子字符串,在这种情况下,应该只有一个匹配项[即'abc123.txt'
将返回[123]
]'\d+\.txt$'
是一个正则表达式,\d+
-任何重复一次或多次的数字,\。
是一个规则点
前面有一个\
,因为通常在正则表达式中,
具有代表任何字符的特殊含义,
转义,将其仅设为常规的
,txt
是要在给定位置匹配的字符串,$
是指示其仅在字符串末尾匹配的符号os.path.basename()
用于检索basename(路径的最后部分[即'\a\b\c\abc123.txt'
]的'abc123.txt'
)re.findall()
始终返回一个列表,因此检索唯一匹配项需要使用[0](即['123',][0]
=>'123'
)int
,以便进行比较。int是传递给#2中的键的值
re.sub('\.txt$','',file)
第一个参数是正则表达式,第二个参数是要替换它的字符串,第三个参数是需要替换的字符串(即,re.sub('a',''banana')
=>bnn
,因为它需要替换