簡體   English   中英

一次寫多個文件

[英]write multiple files at a time

我有一個包含196列表的文件,我想創建新的196個輸出文件,並將每個列表寫入一個新文件,這樣我將有196個輸出文件,每個包含1個輸入數據列表這里是輸入文件:

"['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

file2:

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()

錯誤:列表不屬性寫入。

您當前的代碼將所有內容加載到內存中,這是非常不必要的,然后它會在不合適的位置創建列表,從而導致錯誤。 嘗試這個:

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()

這將只是將每行寫入每個文件。 查找我用來進行索引的枚舉函數。

完成此操作后,您仍然需要編寫解析邏輯以將每一行轉換為一系列行...我不打算在這里為您執行此操作,因為您的原始代碼也沒有真正的邏輯。

你的f是一個文件列表,你必須循環它:

for file in f:
   file.write(value)

你不能讓python在list對象的list類中看作列表理解中的iterable。 該列表與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()

pythonic簡單的方法:

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

我假設您要讀取196個文件,然后將數據(經過一些修改后)寫入新的196個文件。 如果你使用maps和reduce(函數式編程),它可以做你想要的。 雖然在這個問題上沒有太多解釋,但我無能為力。

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) 

我認為這就是你要找的東西:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM