[英]Function that writes a text using one line from one text and one line from another text
因此,我編寫了一個代碼,該代碼應該使用其他兩個文本編寫一個文本文件,該文本以 Text No1. 中的一行文本開頭,然后是 Text No2. 中的一行,然后是 Text No1 中的一行文本。 等等,直到最后它應該以文本文件中行數最多的行結束,例如:
文本 No1。 行:a、b、c、d
文本 No2。 行:e、f、g、h、i、j、k
文字 3。 行(應由程序編寫) a, e, b, f, c, h, d, i, j, k
但是,目前,代碼
def text1():
f = open("textnr1.txt","r", encoding="UTF-8")
for line in f:
y = line.split(".")
print(len(y))
f.close()
f = open("textnr2.txt","r", encoding="UTF-8")
for line in f:
k = line.split(".")
print(len(k))
f.close()
gar=max(len(k),len(y))
f = open("results.txt","a", encoding="UTF-8")
for i in range(gar):
if i<len(y):
f.append(y[i])
if i<len(k):
f.append(k[i])
f.close()
僅當這些文本文件每個文本文件僅包含一行時才有效。 我應該修改什么?
如果兩個文件的長度相同,您可以簡單地使用zip
同時從兩個文件中獲取行,然后將它們都寫入第三個文件(也使用上下文管理器):
with open('file1.txt') as f1, open('file2.txt') as f2, \
open('result.txt', 'w') as res:
for l1, l2 in zip(f1, f2):
res.write(f'{l1}\n{l2}')
您應該修復代碼中的一些錯誤:
len(y)
,但len(y)
始終為 1(當然,如果您的行不包含.
)。 我想您想使用len(y)
作為“文件中的行數”。write()
方法而不是append()
。def text1():
f = open("files/textnr1.txt", "r", encoding="UTF-8")
first_text_lines = f.readlines()
f.close()
f = open("files/textnr2.txt", "r", encoding="UTF-8")
second_text_lines = f.readlines()
f.close()
gar = max(len(first_text_lines), len(second_text_lines))
f = open("files/results.txt", "a", encoding="UTF-8")
for i in range(gar):
if i < len(first_text_lines):
f.write(first_text_lines[i])
if i < len(second_text_lines):
f.write(second_text_lines[i])
f.close()
您可以通過利用 itertools 的鏈和 zip_longest 來合並列表推導中的輸入:
text1 = "abcd"
text2 = "efghijk"
from itertools import chain,zip_longest
r = [ *filter(None,chain.from_iterable(zip_longest(text1,text2)))]
print(r)
['a', 'e', 'b', 'f', 'c', 'g', 'd', 'h', 'i', 'j', 'k']
text1 和 text2 可以是您的 k 和 y 列表或任何可迭代對象(如果需要,甚至超過 2 個)
以上假設您的輸入中沒有空行。 要處理空行,您需要為較短的輸入使用不同的填充值:
noData = object()
r = [x for x in chain.from_iterable(zip_longest(text1,text2,fillvalue=noData))
if x != noData]
目前,您正在為文件中的每一行覆蓋 y 和 k 變量,因此在循環運行后,它們只有最后一行。
如果您仍然需要所有線路,只需執行以下操作:
with open("textnr2.txt","r", encoding="UTF-8") as f:
k=f.readlines()
這將為您處理 f.close() ,並且是推薦的方式。 k 將是文件中所有行的列表。
你說你需要行,但在你的代碼中你是按句點分割的。 我假設這是因為您想測試 function 並且您的多行讀取不起作用。
修復文件讀取后,編寫行的代碼應該可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.