2008-10-16 22 views
7

我想写一个这样的程序:在一个文件夹中,我有n文件数量;首先读取一个文件并执行一些操作,然后将结果存储在单独的文件中。然后读取第二个文件,再次执行操作并将结果保存到新的第二个文件中。执行n文件数量相同的程序。程序逐个读取所有文件并分别存储每个文件的结果。请举例说明我如何做到这一点。如何读取和写入多个文件?

+0

功课??检查海报的历史 – 2008-10-16 11:27:05

+0

也许。但与此同时,我自己也只是在学习Python,似乎是一种很好的练习,可以提醒自己,我不会把头撞在墙上。如果他不在乎自己学习这个级别的东西,那么我该争论谁呢?在一天结束时,如果你考试不及格,你仍然失败。 – 2008-10-16 11:30:44

+0

我把它标记为家庭作业;提问和回答作业问题都在网站的名单中,但是为了提问者的利益,我希望我们首先要求他们提供目前无法使用的代码。 – tzot 2008-10-16 11:42:56

回答

11
import sys 

# argv is your commandline arguments, argv[0] is your program name, so skip it 
for n in sys.argv[1:]: 
    print(n) #print out the filename we are currently processing 
    input = open(n, "r") 
    output = open(n + ".out", "w") 
    # do some processing 
    input.close() 
    output.close() 

然后调用它像:

 
./foo.py bar.txt baz.txt 
5

您可能会发现fileinput模块有用。它专为这个问题而设计。

7

我想你错过的是如何检索该目录中的所有文件。 为此,请使用glob模块。 这里是将.TXT复制所有扩展名的文件*与扩展名为*文件.OUT

import glob 

list_of_files = glob.glob('./*.txt')   # create the list of file 
for file_name in list_of_files: 
    FI = open(file_name, 'r') 
    FO = open(file_name.replace('txt', 'out'), 'w') 
    for line in FI: 
    FO.write(line) 

    FI.close() 
    FO.close() 
0

联合答案纳入目录或文件名的参数具体名单为例:

import sys 
import os.path 
import glob 

def processFile(filename): 
    fileHandle = open(filename, "r") 
    for line in fileHandle: 
     # do some processing 
     pass 
    fileHandle.close() 

def outputResults(filename): 
    output_filemask = "out" 
    fileHandle = open("%s.%s" % (filename, output_filemask), "w") 
    # do some processing 
    fileHandle.write('processed\n') 
    fileHandle.close() 

def processFiles(args): 
    input_filemask = "log" 
    directory = args[1] 
    if os.path.isdir(directory): 
     print "processing a directory" 
     list_of_files = glob.glob('%s/*.%s' % (directory, input_filemask)) 
    else: 
     print "processing a list of files" 
     list_of_files = sys.argv[1:] 

    for file_name in list_of_files: 
     print file_name 
     processFile(file_name) 
     outputResults(file_name) 

if __name__ == '__main__': 
    if (len(sys.argv) > 1): 
     processFiles(sys.argv) 
    else: 
     print 'usage message' 
1

我我刚刚刚学到了os.walk()命令,它可能会帮助你。它允许你沿着目录树结构走下去。

import os 
OUTPUT_DIR = 'C:\\RESULTS' 
for path, dirs, files in os.walk('.'): 
    for file in files: 
     read_f = open(os.join(path,file),'r') 
     write_f = open(os.path.join(OUTPUT_DIR,file)) 

     # Do stuff 
0
from pylab import * 
import csv 
import os 
import glob 
import re 
x=[] 
y=[] 

f=open("one.txt",'w') 

for infile in glob.glob(('*.csv')): 
    # print "" +infile 
    csv23=csv2rec(""+infile,'rb',delimiter=',') 
    for line in csv23:  
     x.append(line[1]) 
     # print len(x) 
    for i in range(3000,8000): 
     y.append(x[i]) 
    print ""+infile,"\t",mean(y) 
    print >>f,""+infile,"\t\t",mean(y) 
    del y[:len(y)] 
    del x[:len(x)]