打印文件名称

时间:2017-04-16 22:08:03

标签: python

f = glob.glob('/fulldirectory/*.txt')

for index, files in enumerate(f, 1):
    r = open(files)
    reader = csv.DictReader(r)

所以我试图在我的分析中打印出文件的实际名称。

上面目录中的每个文件都使用以下约定命名:R1.txt,R2.txt,R3.txt等。

目前我只是使用枚举函数来打印数字 - 但这只能在假设目录中没有文件丢失的情况下工作。

编辑:

我尝试了这个,但它没有给我我想要的东西:

p = [int(s) for s in files if files.isdigit()]

print p

>[0,1]
>[0,2]

2 个答案:

答案 0 :(得分:0)

您只需执行一个简单的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....
  1. sorted()函数用于对文件名列表进行排序,然后将其存储到f(f是file_list的排序版本)

  2. key参数是一个接受参数并输出可排序对象的函数(即strintlist ...),它用于定义用

  3. 排序的键
  4. lambda是一个接受参数' x'的匿名函数,其工作方式与def NoName(x): return something

  5. 相同
  6. 使用re.findall查找与正则表达式匹配的所有子字符串,在这种情况下,只有一个匹配[即。 'abc123.txt'将返回[123]]

  7. '\d+\.txt$'是正则表达式,\d+ - 任何重复一次或多次的数字,\.是常规点. theres a \在前面,因为通常在正则表达式中,.具有代表任何字符的特殊含义,\将其转义,使其仅为常规.txt是要在该给定位置匹配的字符串,$是表示仅匹配字符串的 end 的符号。

  8. os.path.basename()用于检索基本名称(路径的最后部分[即'abc123.txt'的{​​{1}}])

  9. 由于'\a\b\c\abc123.txt'始终返回一个列表,因此检索唯一匹配将涉及使用[0](即。re.findall() => ['123',][0]

    < / LI>
  10. 因为检索的数据是字符串,必须使用int()将其更改为'123'进行比较。 int是传递给#2中int的内容。

  11. key第一个参数是正则表达式,第二个参数是要替换它的字符串,第三个参数是需要替换的字符串(即。re.sub('\.txt$', '', file) =&gt; { {1}}因为它无法替换每个re.sub('a', '', 'banana'))检查#5以获取有关正则表达式的更多信息

  12. 如果您需要进一步澄清,请告诉我

    其他替代方法是:

    bnn

    有用的链接:

    https://docs.python.org/3/library/re.html

    https://docs.python.org/3/library/os.path.html

    https://docs.python.org/3/tutorial/

答案 1 :(得分:0)

就这样:

f = glob.glob('/fulldirectory/*.txt')

for files in f:
    print files.split('\\')[-1].split('.')[0]