मैं एक समस्या में भाग रहा हूं कि मैंने किसी को स्टैक ओवरव्लो मुठभेड़ या यहां तक कि उस मामले के लिए Google को नहीं देखा है।पायथन पूरी पाठ फ़ाइल नहीं पढ़ता
मेरा मुख्य लक्ष्य फ़ाइल में एक स्ट्रिंग के किसी अन्य स्ट्रिंग के अवसरों को प्रतिस्थापित करने में सक्षम होना है। फ़ाइल में सभी लाइनों को स्वीकार करने में सक्षम होने का कोई तरीका है।
समस्या यह है कि जब मैं टेक्स्ट की एक बड़ी टेक्स्ट फ़ाइल (1-2 जीबी) में पढ़ने की कोशिश करता हूं, तो पाइथन केवल इसके सबसेट को पढ़ता है।
newfile = open("newfile.txt","w")
f = open("filename.txt","r")
for line in f:
replaced = line.replace("string1", "string2")
newfile.write(replaced)
और यह केवल मूल फ़ाइल की पहली 382 एमबी लिखते हैं:
उदाहरण के लिए, मैं वास्तव में एक बस के रूप में कमान करेंगे। क्या किसी ने पहले इस समस्या का सामना किया है?
मैं ऐसे का उपयोग कर के रूप में कुछ अलग करने की कोशिश की समाधान:
import fileinput
for i, line in enumerate(fileinput.input("filename.txt", inplace=1)
sys.stdout.write(line.replace("string1", "string2")
लेकिन यह एक ही प्रभाव पड़ता है। और न ही इस तरह के
मैं ज्यादातर संभावना समस्या में एक पढ़ने और नहीं एक लिखित समस्या जा रहा है क्योंकि यह बस लाइनों बाहर मुद्रण के लिए होता है के लिए नीचे संकुचित किया है का उपयोग कर के रूप में मात्रा में फ़ाइल को पढ़ने नहीं करता है। मुझे पता है कि और लाइनें हैं। जब मैं इसे एक पूर्ण पाठ संपादक में खोलता हूं जैसे कि विम, मैं देख सकता हूं कि आखिरी पंक्ति क्या होनी चाहिए, और यह अंतिम रेखा नहीं है जो पायथन प्रिंट करता है।
क्या कोई भी कोशिश करने के लिए कोई सलाह या चीजें पेश कर सकता है?
मैं वर्तमान में राम की 3.25 GB के साथ Windows XP के 32-बिट संस्करण का उपयोग कर रहा है, और अजगर 2.7
चल * समाधान संपादित मिला (धन्यवाद Lattyware)। एक इटरेटर
def read_in_chunks(file, chunk_size=1000):
while True:
data = file.read(chunk_size)
if not data: break
yield data
एक पुनरावर्तक के साथ लाइन द्वारा पढ़ना लाइन आलसी ऑपरेशन होना चाहिए, इसलिए इसे फ़ाइल के आकार के बावजूद काम करना चाहिए। हालांकि यह आपकी स्थिति को प्रभावित नहीं करेगा, आप फ़ाइलों को खोलते समय '' '' 'का उपयोग करना भी चाहेंगे - यह अपवादों के तहत सही तरीके से बंद होने की तुलना में एक अच्छा अभ्यास है। –
यह बहुत अच्छा काम किया! बहुत बहुत धन्यवाद। * संपादित करें: मैंने इटरेटर कोड को यहां पोस्ट करने का प्रयास किया, लेकिन यह प्रारूपित नहीं होगा, इसलिए मैंने इसे मूल पोस्ट में जोड़ा। – user1297872
क्या आपने इसे एक अलग बड़ी टेक्स्ट फ़ाइल के साथ करने की कोशिश की है? फ़ाइल 382 एमबी में कुछ अजीब बात है - कुछ अजीब चरित्र जिसे फाइल के अंत के रूप में माना जा रहा है? मेरे पास – neil