如何在python中读取目录的JUST文件名,然后为所有人执行相同的工作?

时间:2013-05-30 09:24:27

标签: python string numpy replace readfile

我有一个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的输出名称。

感谢您的建议。

2 个答案:

答案 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