मैंने हाल ही में कुछ ऐसा करने के लिए एक स्क्रिप्ट लिखी है। यह एक परियोजना को पार करेगा, सभी मॉड्यूल निर्भरताओं को ढूंढ देगा और किसी भी गायब आयात विवरण जोड़ देगा। मैं इस पोस्ट को पूरी लिपि के साथ अव्यवस्थित नहीं करूंगा, लेकिन मैं दिखाऊंगा कि मैं अपनी फाइलों को संशोधित करने के बारे में कैसे गया।
import os
from mmap import mmap
def insert_import(filename, text):
if len(text) < 1:
return
f = open(filename, 'r+')
m = mmap(f.fileno(), os.path.getsize(filename))
origSize = m.size()
m.resize(origSize + len(text))
pos = 0
while True:
l = m.readline()
if l.startswith(('import', 'from')):
continue
else:
pos = m.tell() - len(l)
break
m[pos+len(text):] = m[pos:origSize]
m[pos:pos+len(text)] = text
m.close()
f.close()
सारांश: यह स्निपेट एक फ़ाइल नाम और टेक्स्ट का एक ब्लॉब डालने के लिए लेता है। यह पहले से मौजूद अंतिम आयात विवरण पाता है, और उस स्थान पर टेक्स्ट चिपकता है।
जो भाग मैं सबसे ज्यादा ध्यान देने का सुझाव देता हूं वह एमएमएपी का उपयोग है। यह आपको फ़ाइलों के साथ काम करने देता है उसी तरह आप एक स्ट्रिंग के साथ काम कर सकते हैं। बेहद सुविधाजनक।
स्रोत
2008-12-04 01:52:50
यह कठिन है क्योंकि यह कठिन है। आप जो कर रहे हैं वह चर-लंबाई वाली रेखाओं वाली टेक्स्ट फ़ाइलों के लिए वास्तव में समझदार नहीं है। –
इस प्रश्न के अनुवर्ती की तरह दिखने के लिए http://stackoverflow.com/questions/328059/create-a-list-that-contain-each-line-of-a-file देखें। –
मैंने आपके प्रश्न को काफी हद तक संशोधित किया है, अगर मुझे कुछ गलत समझा गया है तो मुझे बताएं। एस लॉट भी सही है, हालांकि ऐसा लगता है कि यह सरल होना चाहिए, फ़ाइल को संशोधित करना वास्तव में काफी मुश्किल है। –