Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打印文件名_Python - Fatal编程技术网

Python 打印文件名

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

因此,我试图打印出一个文件的实际名称,作为我分析的一部分

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

目前,我只是简单地使用enumerate函数来打印数字——但这只是在假定目录中没有文件丢失的情况下才起作用

编辑:

我试过这个,但它没有给我想要的:

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
    …),用于定义其排序的键

  • lambda是一个接受参数“x”的匿名函数,其工作方式与
    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
    ,以便进行比较。int是传递给#2中的
    键的值

  • re.sub('\.txt$,'',file)
    第一个参数是正则表达式,第二个参数是要替换它的字符串,第三个参数是需要替换的字符串(即,
    re.sub('a','','banana')
    =>
    bnn
    ,因为它用零替换每个
    a
    )有关正则表达式的更多信息,请查看#5

  • 如果你需要更多的澄清,告诉我

    另一种导入方法是:

    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....
    
    有用链接:


    您只需执行一个简单的
    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
    …),用于定义其排序的键

  • lambda是一个接受参数“x”的匿名函数,其工作方式与
    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
    ,以便进行比较。int是传递给#2中的
    键的值

  • re.sub('\.txt$','',file)
    第一个参数是正则表达式,第二个参数是要替换它的字符串,第三个参数是需要替换的字符串(即,
    re.sub('a',''banana')
    =>
    bnn
    ,因为它需要替换