我有一个python脚本,最初从输入数据文件中读取此行:
x,y = genfromtxt('data1.txt').T
然后我继续对x,y进行处理(它取决于固定的参数,例如n = 5)。最后,我使用此行生成输出文件
with open('output_data1_n{0}.txt'.format(num),'wb') as file:
这给了我output_data1_n5.txt并在上面写了xnew和ynew。
问题:我有一个包含许多txt文件的目录!如何系统地为该目录中的所有文件执行此作业,而不是为每个输入文件手动运行?
应该是这样的:将txt文件(例如os.walk?)作为字符串并将其替换为输入,然后生成包含参数n的输出名称。
感谢您的建议。
答案 0 :(得分:1)
尝试glob
module。
它允许您使用一些通配符获取目录中的文件名列表。
示例:
from glob import glob
from os import path
def get_files_in(folder, pattern='*.txt'):
return glob(path.join(folder, pattern))
用法:
get_files_in('C:/temp') # files in C:/temp that are ending with .txt
get_files_in('C:/temp', '*.xml') # files in C:/temp that are ending with .xml
get_files_in('C:/temp', 'test_*.csv') # files in C:/temp that start with test_ and end in .csv
答案 1 :(得分:1)
正如Inbar Rose已经解释的那样,您可以使用glob
获取文件列表。要将输入文件名转换为适当的输出文件名,可以使用正则表达式从输入名称中提取文件编号,然后使用它来构造输出名称。
这样的事情:
import os
import glob
import re
inputPath = '.' # the directory where your files are stored
num = 5 # the fixed parameter, n
# first obtain all the data*.txt files in the directory
for inputName in glob.glob(os.path.join(inputPath,'data*.txt')):
# attempt to extract the file number from the input name
fileNum = re.findall(r'data([0-9]+)\.txt',inputName)
# if not successful, skip this file
if not fileNum: continue
# create the output filename using the fle number and the fixed parameter
outputName = 'output_data{0}_{1}.txt'.format(fileNum[0],num)
# add the input path to the filename, or use a different path if necessary
outputName = os.path.join(inputPath,outputName)
# process the file
x,y = genfromtxt(inputName).T
with open(outputName,'wb') as file:
# do the rest of your code here
pass