Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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_Regex - Fatal编程技术网

Python 如何设计一个函数,根据用户输入打开文件夹,选择具有特定标题格式的文件,然后从中读取特定行?

Python 如何设计一个函数,根据用户输入打开文件夹,选择具有特定标题格式的文件,然后从中读取特定行?,python,regex,Python,Regex,我现在的大脑完全冻结了,似乎不知道如何设计一个代码,在一个函数中执行一系列任务。基本上,我想设计一个代码,要求用户输入工作目录中文件夹的名称。文件夹的名称将有一个6位数字(在本例中,假设文件夹的编号为111234)。指定文件夹后,将打开并读取该文件夹中的某些文件。将根据文件名的格式选择这些文件,即 (foldername)_(filenumber)_0_structure.in 其中,对于本例,foldername为111234,filenumber表示文件在文件夹中出现的顺序(可以是零或更高

我现在的大脑完全冻结了,似乎不知道如何设计一个代码,在一个函数中执行一系列任务。基本上,我想设计一个代码,要求用户输入工作目录中文件夹的名称。文件夹的名称将有一个6位数字(在本例中,假设文件夹的编号为111234)。指定文件夹后,将打开并读取该文件夹中的某些文件。将根据文件名的格式选择这些文件,即

(foldername)_(filenumber)_0_structure.in
其中,对于本例,foldername为111234,filenumber表示文件在文件夹中出现的顺序(可以是零或更高的数字)。文件名中的其他术语(如文件号后的零)、单词“structure”和.in文件扩展名都是常量。选择并打开符合此格式的所有文件后,我希望将这些文件的第2行和第3行读取并复制到dict中,dict的键是文件的文件号,其值包含字符串列表(即第2行和第3行)

到目前为止,为了满足这些需求,我写了以下内容:

import os
from os import path
import re

def folder_validation(foldername):
    folder_contents= {}
    while True:
       try:
           foldername= str(raw_input(foldername))
           file_path= path.join(current_directory, foldername)
       except IOError:
           print("Please give the name of a folder that exists in the current working directory.")
           continue 
    for filename in os.listdir(file_path):
        if re.search("{}_{}_0_detect1.in".format(foldername,[0*]), filename):
            file_contents= str(open(filename).readlines()[2:3])
            folder_contents[filenumber]= file_contents
    return folder_contents

folder_input= folder_validation("Please give the name of the relevant folder you wish to analyze:")

上述代码最明显的问题是,我不确定如何格式化正则表达式搜索,以包括用户的输入和filenumber变量中任何整数的位置。此外,原始输入似乎不起作用。任何帮助都将不胜感激

我的代码中有两个主要问题:第一个问题是我没有正确配置while循环条件,因此代码会被卡住。第二个问题是,我没有正确设置文件夹中文件的文件路径,因此,我的代码无法打开文件并读取它们。regex行也得到了改进,以包括任何可以读取数字0及以上的文件名(以指定的格式)。代码的更正版本发布在下面

import os
from os import path
import re

def folder_validation(foldername):
    folder_contents= {}
    while True:
       try:
           foldername= str(raw_input(foldername))
           file_path= path.join(current_directory, foldername)
       except IOError:
           print("Please give the name of a folder that exists in the current working directory.")
           continue
       else:
            break 
    while True:    
        for filename in os.listdir(file_path):
            if re.search("{}_[0-9]+_0_detect1.in".format(foldername,[0*]), filename):
                file_contents= open(path.join(file_path,filename))
                file_lines= file_contents.readlines()[2:3]
                folder_contents[filename]= file_lines
    return folder_contents

folder_input= folder_validation("Please give the name of the relevant folder you wish to analyze:")

[0*]
格式参数应该代表什么?
foldername=str(原始输入(foldername))
在Python 2.7中运行良好-您需要向
raw\u输入添加一些细节,但它似乎不起作用。
@wwii[0*]是我试图编写一个参数来搜索所有有数字的文件(零或更大)在其文件名的该部分(即第二个下划线之后)。我知道这是不正确的,但我不知道如何设置这样一个参数的格式。有很多类似于python的在线正则表达式测试人员,他们对创建正则表达式模式非常有用。你需要花一些时间学习正则表达式。要匹配一个或多个数字,你可以使用
[0-9]+
\d+
-您的格式字符串将是-
模式=“{}[0-9]+\u 0\u detect1.in”。格式(foldername)
您的while循环条件(
True
)永远不会改变,您也永远不会做任何事情来打破它。也许可以看看