2017-08-11 65 views
0

我試圖完成我的代碼。Python中的循環隨機行文件文本

文件中的文本前codetest.txt:

aaaa 
eeeee 
rrrrrrr 
tttt 
yyyyyy 
uuuuu 
iiiiiii 
ooooo 
ppppppppp 
llllllll 

我想這需要一個文本文件的隨機線路代碼,然後將其打印到屏幕上,刪除在文本文件中的印刷線。我完成了我的代碼。 它的工作:

import random 
import sys 
f = open("codetest.txt", "r") 
lines = f.read().splitlines() 
random_lines = random.sample(lines, 1) 
code = "\n".join(random_lines) # var code 
w = open("codetest.txt", "w") 
w.writelines(line + "\n" for line in lines if line not in random_lines) 
print("code :", code) 

現在我想將執行重複工作,直到在空的文本文件中的循環。它沒有工作 我的代碼迴路:

import random 
import sys 
i=0 
while i<5: 

    i+=1 
    f = open("codetest.txt", "r") 
    lines = f.read().splitlines() 
    random_lines = random.sample(lines, 1) 
    code = "\n".join(random_lines) # var code 
    w = open("codetest.txt", "w") 
    w.writelines(line + "\n" for line in lines if line not in random_lines) 
    print("code",i," : ", code) 
+0

請詳細告訴我。 我是新pythoner 謝謝 – Chellam

+0

不''而1 <2:'。這將是'當我<2:'時。 –

+0

而I <2: ERRO:C:\ python3.6 \ python.exe E:/Python/ex/test/test.py 代碼1:YYYYYY 回溯(最近最後調用): 文件「E :/Python/ex/test/test.py「,第36行,在 random_lines = random.sample(lines,1) 文件」C:\ python3.6 \ lib \ random「。py「,第317行,樣本 raise ValueError(」樣本大於總體或負數「) ValueError:樣本大於總體或爲負 – Chellam

回答

0

Python中的小怪癖,如果不關閉文件,它永遠不會寫入任何數據它。 (你的第一個程序只工作,因爲python在程序結束時自動關閉文件。)

嘗試添加w.close()作爲循環的最後一行。

當您完成使用它們時關閉文件是一種很好的做法。希望這有助於:)

+0

Tuyệtvời,nóđãlàmviệc。cảmơn.Thatis my shortcoming。 – Chellam

0

它遺漏.close()

例子:

w = open("codetest.txt", "w") 
w.writelines(...stuffs...) 
w.close() 

沒有.close(),書寫線將緩存在內存中。對於第一種情況,退出程序時文件將自動關閉。但在後一種情況下,fw未正確關閉。

更好的風格,可以是這樣的:

with open("codetest.txt", "w") as w: 
    w.writelines(...stuffs...) 

with語句將處理文件對象的生命週期。 https://docs.python.org/3.5/reference/compound_stmts.html#the-with-statement

+0

這是我的缺點。 – Chellam

0

我想IO實踐文件,使用推薦with open():成語

,看到list.pop(index)通過一次

print("code :", lines.pop(random.randrange(len(lines))))做2個所需的操作符合代碼規範做幾乎所有的非文件IO工作

import random 
import sys 

txt = """aaaa 
eeeee 
rrrrrrr 
tttt 
yyyyyy 
uuuuu 
iiiiiii 
ooooo 
ppppppppp 
llllllll 
""" 
with open('codetest.txt', 'w+') as f: 
    f.writelines(txt) 

while True: 
    with open('codetest.txt', 'r') as f: 
     lines = f.read().splitlines() 
    if lines: # check if file is (not)empty 
     print("code :", lines.pop(random.randrange(len(lines)))) 
     with open('codetest.txt', 'w') as f: 
      f.writelines(s+'\n' for s in lines) 
    else: 
     break # file is empty, break out of while loop 

code : aaaa 
code : tttt 
code : ooooo 
code : ppppppppp 
code : iiiiiii 
code : yyyyyy 
code : llllllll 
code : rrrrrrr 
code : uuuuu 
code : eeeee