2016-11-01 31 views
6

में बदलती फ़ाइल पढ़ना मैं पाइथन में एक बदलती फ़ाइल को पढ़ने की कोशिश कर रहा था, जहां एक स्क्रिप्ट नई संलग्न लाइनों को संसाधित कर सकती है। मेरे पास नीचे लिपि है जो फाइल में लाइनों को प्रिंट करती है और समाप्त नहीं होती है।पायथन 3 और पायथन 2

with open('tmp.txt','r') as f: 
    while True: 
     for line in f: 
      print(line.replace('\n','')) 

जहाँ 'tmp.txt' कुछ लाइनें शामिल हैं, जैसे:

a 
d 
2 
3 

अगर मैं इस तरह का उपयोग कर के रूप में 'tmp.txt' फ़ाइल के साथ जोड़ दिया,:

echo "hi" >> tmp.txt 

स्क्रिप्ट पाइथन 3 के साथ चलने पर नई लाइन को प्रिंट करेगी, लेकिन पायथन 2 के साथ नहीं। क्या पाइथन 2 में बराबर है? और इस मामले में पायथन के दो संस्करणों के बीच क्या अंतर है?

उत्तर

5

अजगर 2.7 बनाम 3.5 में वस्तुओं f को देखते हुए वे थोड़े अलग हैं

निम्नलिखित

with open('tmp.txt','r') as f: 
    print(f) 
    print(type(f)) 

अजगर में 2.7 रिटर्न

<open file 'tmp.txt', mode 'r' at 0x0000000003DD9780> 
<type 'file'> 

अजगर में जबकि 3.5 रिटर्न

<_io.TextIOWrapper name='tmp.txt' mode='r' encoding='cp1252'> 
<class '_io.TextIOWrapper'> 

समान व्यवहार का उपयोग कर

import io 

with io.open('tmp.txt','r') as f: 
    while True: 
     for line in f: 
      print(line.replace('\n','')) 
1

इस चाल करना चाहिए अजगर 2.7 में प्राप्त किया जा सकता है।

import time 

def follow(file): 
    thefile.seek(0,2) 
    while True: 
     line = thefile.readline() 
     if not line: 
      time.sleep(0.1) 
      continue 
     yield line 

if __name__ == '__main__': 
    logfile = open("log.txt","r") 
    loglines = follow(logfile) 
    for line in loglines: 
     print(line) 

यहाँ मूल मिला: Reading from a frequently updated file

+0

पूरे मुद्दा यह है कि मेरे रास्ते के माध्यम से यह एक विशिष्ट टाइमर को अतुल्यकालिक है। यदि आप एक सर्वर या कुछ चला रहे थे, तो यह काफी समस्या होगी –

संबंधित मुद्दे