2008-10-16 14 views
7

मैं इसके लिए एक प्रोग्राम लिखना चाहता हूं: एक फ़ोल्डर में मेरे पास n फ़ाइलों की संख्या है; पहले एक फ़ाइल पढ़ें और कुछ ऑपरेशन करें, फिर परिणाम को एक अलग फ़ाइल में स्टोर करें। फिर दूसरी फ़ाइल पढ़ें, फिर से ऑपरेशन करें और परिणाम को दूसरी दूसरी फ़ाइल में सहेजें। n फ़ाइलों की संख्या के लिए एक ही प्रक्रिया करें। कार्यक्रम सभी फ़ाइलों को एक-एक करके पढ़ता है और प्रत्येक फ़ाइल के परिणामों को अलग से स्टोर करता है। कृपया उदाहरण दें कि मैं इसे कैसे कर सकता हूं।एकाधिक फ़ाइलों को पढ़ने और लिखने के लिए कैसे?

+0

होमवर्क ?? पोस्टर के इतिहास की जांच करें –

+0

शायद। लेकिन साथ ही, मैं सिर्फ पाइथन सीख रहा हूं, खुद को याद दिलाने के लिए एक अच्छा अभ्यास की तरह लगता है कि मैं दीवार के खिलाफ अपने सिर को टक्कर नहीं दे रहा हूं। अगर वह खुद को इस स्तर की चीजें सीखने के लिए पर्याप्त परवाह नहीं करता है, तो मैं किस पर बहस करूँगा? दिन के अंत में, यदि आप परीक्षा में विफल रहते हैं, तो भी आप असफल हो गए हैं। –

+0

मैंने इसे होमवर्क के रूप में टैग किया; गृहकार्य प्रश्न पूछना और जवाब देना साइट के रोस्टर में है, हालांकि पूछताछ के लाभ के लिए मैं चाहता हूं कि हम उन्हें पहले कोड प्रदान करने के लिए कहें जो अब तक काम नहीं करता है। – tzot

उत्तर

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 
+0

प्रिंट (एन) इसे पायथन 3 संगत बनाने के लिए। अभी भी कम से कम 2.4 के साथ काम करता है। – Bernard

+0

मैं स्मृति से 2.3 चला रहा हूं, लेकिन सिर के लिए धन्यवाद। –

+0

यह एक तर्क के लिए अधिक हो सकता है, लेकिन मैं कमांड लाइन पार्सिंग के लिए optparse मॉड्यूल की सिफारिश करता हूं। उद्धरणों को संभालने जैसे बदसूरत कार्यों की देखभाल करता है, आदि – monkut

5

आप fileinput मॉड्यूल उपयोगी मिल सकता है। यह वास्तव में इस समस्या के लिए बनाया गया है।

7

मुझे लगता है कि आप जो याद करते हैं वह है कि उस निर्देशिका में सभी फ़ाइलों को कैसे पुनर्प्राप्त करें। ऐसा करने के लिए, ग्लोब मॉड्यूल का उपयोग करें।

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' 
+0

इस उदाहरण के साथ एक छोटा मुद्दा। अगर मेरे पास 'mytxtfile.txt' नामक फ़ाइल है तो क्या होगा? –

0

संयुक्त जवाब को शामिल निर्देशिका या फ़ाइल नाम तर्कों की विशिष्ट सूची .out विस्तार के साथ * फ़ाइलों को .txt एक्सटेंशन वाली सभी फाइलों * नकल जाएगा मैंने हाल ही में 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 
1

मैं: यहाँ एक उदाहरण है जो

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
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)] 
संबंधित मुद्दे