2012-12-10 103 views
1

我有196列表中有一個文件,我想創造新的196的輸出文件和寫每個列表的一個新的文件,所以我將有各含1 196個輸出文件輸入數據 的名單下面是輸入文件:寫多個文件同時

"['128,129', '116,118', '108,104', '137,141', '157,144', '134,148', '138,114', '131,138', '248,207', '208,247', '246,248', '101,106', '131,115', '119,120', '131,126', '138,137', '132,129']" 
"['154,135', '151,147', '236,244', '243,238', '127,127', '125,126', '122,124', '123,126', '127,129', '122,121', '147,134', '126,132', '128,137', '233,222', '222,236', '125,126']" 

.....這裏例如,我已經給了只有2名單,但總的196名單都存在。 輸出應該是:

文件1:

128,129 
116,118 
108,104 

文件2:

154,135 
151,147 
236.244 

當前代碼:

fn = open("/home/vidula/Desktop/project/ori_tri/inpt.data","r") 
fnew = fn.read() 
fs = fnew.split('\n') 
for value in fs: 
    f = [open("/home/vidula/Desktop/project/ori_tri/input_%i.data" %i,'w') for i in range(len(list_of_files))] 
    f.write(value) 
    f.close() 

錯誤:列表沒有屬性寫入。

+0

爲什麼你標記它 '出'?你在用什麼語言? – Osiris

+1

什麼語言?你有什麼嘗試? – assylias

+0

因爲Stackoverflow不會爲你寫代碼:你自己試過了什麼?另見[FAQ](http://stackoverflow.com/faq)。 – Evert

回答

0

我假設你要讀196個文件,然後寫入數據(一些修改後),以新的196個文件。如果你使用地圖和減少(功能編程),它可以做你想做的。雖然在這個問題上沒有太多的解釋,但我無法提供很多幫助。

def modify(someString): 
    pass # do processing 

def newfiles(oldfilename): return '%s.new.txt'%(oldfilename) # or something 

filenames = ('a', 'b', 'c', 'd', ....) 
handles = [(open(x, 'r'), open(newfile(x), 'w')) for x in filenames] # not using generator 
tmp = [y[1].write(modify(y[0].read())) for y in handles) 
+0

@山姆。我只是看到了錯誤(單ñ雙引號(在我可以改變它之前,你做到了)謝謝 – pranshus

+1

「Lambda編程」不是你要找的術語,我假設你的意思是說「功能編程」 –

+0

@最大是的我的確在試圖說函數式編程更正謝謝 – pranshus

0

您的f是文件列表,您可以通過它必須循環:

for file in f: 
    file.write(value) 
+0

嘗試過:Traceback(最近呼叫的最後一個): 文件「/home/vidula/Desktop/project/try_brain-input.py」,第38行,如果沒有,請在問題中更具體。在 f.write(值) AttributeError:'list'對象沒有屬性'寫' – shreya

+0

不,你沒有嘗試:)你仍然有「f.write」,但你必須迭代通過該元素列表(假設f仍然使用您的初始生成器表達式創建) –

6

您當前的代碼加載到一切記憶,這是完全沒有必要,那麼它正在以列表一個不合適的地方,因此你的錯誤。試試這個:

fn = open("/home/vidula/Desktop/project/ori_tri/inpt.data","r") 
for i, line in enumerate(fn): 
    f = open("/home/vidula/Desktop/project/ori_tri/input_%i.data" %i,'w') 
    f.write(line) 
    f.close() 

這將只是寫每一行,因爲它是每個文件。查找我用來做索引的函數enumerate

這樣做之後,你仍然需要編寫解析邏輯把每一行成一系列的線......我不打算在這裏爲你做的,因爲你原來的代碼並沒有真正的邏輯因爲它。

0

我認爲這是你在找什麼:

with open("/home/vidula/Desktop/project/ori_tri/inpt.data","r") as fn: 
    listLines = fn.readlines() 

for fileNumber, line in enumerate(listLines): 
    with open("/home/vidula/Desktop/project/ori_tri/input{0}.data".format(fileNumber), "w") as fileOutput: 
     fileOutput.write(line) 
1

你不能讓蟒蛇查看寫對象視爲可迭代列表理解列表類中。該列表與write()方法不兼容。在python列表中添加。

假設你的數據文件,在該文件中有新的生產線已經,創建一個過濾器對象,以刪除空行,然後遍歷:

string1 = '128,129', '134, 167', '127,189' 
string2 = '154, 134', '156, 124', '138, 196' 
l1 = list(string1) 
l2 = list(string2) 
data = [l1, l2] 
f = open("inpt.data", "w") 
for val in data: 
    f.write(str(val)) 
    f.write('\n') 
f.close() 

with open("inpt.data", "r", encoding='utf-8') as fs: 
    reader = fs.read() 
    file = reader.split('\n') 
    file = filter(None, file) 

最簡單的方法:

# create one file for each list of data (1) on every new line 
i = 0 
for value in file: 
    i += 1 
    f = open("input_%s.data" % i, 'w') 
    f.write(value) 
fs.close() 

的Python的簡單方法:

for i, line in enumerate(file): 
    fi = open("input_%s.data" % i, 'w') 
    fi.write(line) 
fs.close()