Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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,我想选择data_file directory中的所有文件,这些文件包含template_file directory中文件的第一个和第二个下划线之间的字符串。 例如,在模板文件目录中有以下文件: 汉堡2020.xlsx、悉尼2020.xlsx和华盛顿2020.xlsx摘要 数据文件目录中有以下文件: 汉堡2018.xlsx、汉堡2019.xlsx、汉堡2020.xlsx、悉尼2018.xlsx、悉尼2019.xlsx、悉尼2020.xlsx、华盛顿2018.xlsx 因此,如果选择了文件摘要\

我想选择data_file directory中的所有文件,这些文件包含template_file directory中文件的第一个和第二个下划线之间的字符串。 例如,在模板文件目录中有以下文件:

汉堡2020.xlsx、悉尼2020.xlsx和华盛顿2020.xlsx摘要

数据文件目录中有以下文件:

汉堡2018.xlsx、汉堡2019.xlsx、汉堡2020.xlsx、悉尼2018.xlsx、悉尼2019.xlsx、悉尼2020.xlsx、华盛顿2018.xlsx

因此,如果选择了文件摘要\u Hamburg\u 2020.xlsx,则应在屏幕上打印文件数据\u Hamburg\u 2018.xlsx、数据\u Hamburg\u 2019.xlsx、数据\u Hamburg\u 2020.xlsx。如果选择了文件摘要\u Sydney\u 2020.xlsx,则应打印文件数据\u Sydney\u 2018.xlsx、数据\u Sydney\u 2019.xlsx、数据\u Sydney\u 2020.xlsx

可以用fnmatch做吗?我当前的解决方案不起作用

import fnmatch
import os

data_file = "C:\\2020\\New\\"
template_file = "C:\\2020\\New\\Reports\\"  

for filename1 in os.listdir(template_file):
  for filename2 in os.listdir(data_file):
    city = '_'.join(filename1.split('_')[1:2])
    if (fnmatch.fnmatch(filename1, city)):
        print(filename1, filename2)
    else:
        continue 

告诉我这是否适合你

import os

data_file = "path1"
template_file = "path2"  

for filename1 in os.listdir(template_file):
    city = filename1.split('_')[1] if filename1.count('_') > 1 else 'Nothing'
    for filename2 in os.listdir(data_file):
        if (city != 'Nothing') and (filename2.count('_') > 1) and (filename2.split('_')[1] == city) :
            print(filename2)

此代码适用于某些条件,例如在path1中仅为模板文件,在path2中仅为数据文件(满足格式text1\u text2\u text3.extension)

告诉我这是否适合您?:

import os

data_file = "path1"
template_file = "path2"  

for filename1 in os.listdir(template_file):
    city = filename1.split('_')[1] if filename1.count('_') > 1 else 'Nothing'
    for filename2 in os.listdir(data_file):
        if (city != 'Nothing') and (filename2.count('_') > 1) and (filename2.split('_')[1] == city) :
            print(filename2)

此代码在某些条件下工作,例如在path1仅为模板文件和path2仅为数据文件(满足格式text1\u text2\u text3.extension)

虽然仅代码答案可能会回答此问题,但您可以通过为代码提供上下文(这是此代码工作的原因)来显著提高答案的质量,以及一些参考文件供进一步阅读。From:“简洁是可以接受的,但更完整的解释更好。”欢迎来到Stack Overflow!非常感谢。是的,它有效。你能解释一下这行代码是如何工作的吗:city=filename1.split(“”)[1]如果filename1.count(“”)>1,则其他“无”。特别是:filename1.count(“”)>1?
code if condition else code2
-在python中称为inline if statement。在python中,第一行代码将
filename
的一部分分配给第一个和第二个下划线,或者
Nothing
if statement确保
filename
至少包含两个下划线,否则将
Nothing
分配给
city
变量此代码的有趣之处在于这一行
if(city!=“Nothing”)和……
我特意将
Nothing
放在第一个条件中。如果
city
等于
Nothing
,那么如果
的其余部分没有被评估,而只有代码的答案可能会回答这个问题,您可以通过提供代码的上下文、该代码工作的原因以及一些文档参考来进一步阅读,从而显著提高答案的质量。From:“简洁是可以接受的,但更完整的解释更好。”欢迎来到Stack Overflow!非常感谢。是的,它有效。你能解释一下这行代码是如何工作的吗:city=filename1.split(“”)[1]如果filename1.count(“”)>1,则其他“无”。特别是:filename1.count(“”)>1?
code if condition else code2
-在python中称为inline if statement。在python中,第一行代码将
filename
的一部分分配给第一个和第二个下划线,或者
Nothing
if statement确保
filename
至少包含两个下划线,否则将
Nothing
分配给
city
变量此代码的有趣之处在于这一行
if(city!=“Nothing”)和……
我特意将
Nothing
放在第一个条件中。如果
city
等于
Nothing
,则不计算
的其余部分