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