簡體   English   中英

在單行上打印不起作用Python 3

[英]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.

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