[英]Print on a single line not working Python 3
我是編程新手,正在研究一些代碼以從一堆文本文件中提取數據。 我已經能夠做到這一點,但是數據對我在Excel中沒有用。 因此,我想將它們全部打印在一行上,並用一個特殊字符將其分開,然后可以在Excel中定界。
這是我的代碼:
import os
data=['Find me','find you', 'find us']
with open('C:\\Users\\Documents\\File.txt', 'r') as inF:
for line in inF:
for a in data:
string=a
if string in line:
print (line,end='*') #print on same line
inF.close()
因此,基本上我正在做的是查找關鍵字是否在該行上,然后在該行上打印該行。
即使我有print(,end ='*'),也沒有一行打印出來。 它輸出:
Find me
*find you
*find us
問題出在哪兒? (我正在使用Python 3.5.1)
您的直接問題是,在打印行之前沒有從行中刪除換行符。 通常的方法是使用strip()
,例如:
print(line.strip(), end='*')
如果一行中出現多個特殊短語,您還將打印該行的多個副本。 為了避免這種情況,請在打印后添加一個break
語句,或者使用(如果更好(一個更高級的構造,除非您習慣於生成表達式), if any(keyword in line for keyword in data):
才有意義)使用if any(keyword in line for keyword in data):
您也不需要顯式關閉輸入文件with open(...) as ...:
的要點是with open(...) as ...:
上下文管理器是它在退出文件時將其關閉。
而且我會避免將string
用作變量名-它不會告訴任何人該變量的用途,並且如果最終對任何內容都使用內置的string
模塊,可能會引起混亂。 它不如隱藏諸如list
類的內置構造函數那樣糟糕,但是值得避免。 特別是因為它在這里對您沒有任何幫助,因此您可以僅使用if a in line:
如果您不想使用上述的any()
版本,請在此處使用。
除此之外,如果您的數據不是非常大(並且希望不是全部都放在一行上),您將得到整齊的代碼,並通過使用.join()
來避免尾隨定界符字符串的方法,例如:
import os
data=['Find me','find you', 'find us']
with open('C:\\Users\\Documents\\File.txt', 'r') as inF:
print "*".join(line.strip() for line in inF if any(keyword in line for keyword in data))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.