2016-07-04 83 views
0

我對編程非常陌生,並且正在研究一些代碼以從一堆文本文件中提取數據。我已經能夠做到這一點,但是這些數據在Excel中對我無用。因此,我希望將其全部打印在一行中,並用特殊字符分隔,然後我可以在Excel中進行分隔。單行打印不起作用Python 3

這裏是我的代碼:

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)

回答

1

您的直接問題是,在打印它們之前,您並未從行中刪除換行符。通常的方式做,這是strip(),如:

print(line.strip(), end='*') 

您還可以打印線的多個副本,如果你的特殊短語不止一個出現在該行。爲避免這種情況,請在打印後添加break聲明,或者(更好,但更高級的構造在用於生成表達式之前可能沒有意義)使用if any(keyword in line for keyword in data):

您也不需要顯式關閉輸入文件 - with open(...) as ...:上下文管理器的要點是它在退出時關閉文件。

而且我會避免使用string作爲變量名稱 - 它不會告訴任何人有關變量的用途,如果您最終使用內置的string模塊進行任何操作,會導致混淆。它不像陰影像list這樣的內置構造函數那麼糟糕,但值得避免。特別是因爲它在這裏沒有爲你做任何事情,如果你不想使用上面的any()版本,你可以在這裏使用if a in line:。除了所有這些,如果你的數據不是非常大(並且我希望這不是如果你想把它全部放在一行上),你將會得到更加整潔的代碼,並且避免使用尾隨分隔符.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)) 
+0

哦,哇,太簡單了! 非常感謝您的額外建議!我很感激需要花費的時間。 – micuzzo

+0

如果您使用電子表格和Python進行大量工作,請確保查看內置的'csv'模塊 - 當您處理交易時,它會爲您做很多工作帶有分隔文件。 –

+0

是的,我一直在研究它,但是這種有點狡猾的方式是爲了得到一個快速的結果。但再次感謝! – micuzzo