2008-10-16 25 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)]