2017-12-02 115 views
0

我試圖從我從Kindle導入的文本文件中刪除幾行文字。文字如下:刪除導入的文本文件(Python)

Shall I come to you? 
Nicholls David, One Day, loc. 876-876 


Dexter looked up at the window of the flat where Emma used to live. 
Nicholls David, One Day, loc. 883-884 


I want to grab the bin bag and do a forensics 
Sophie Kinsella, I've Got Your Number, loc. 64-64 

完整文件更長,這只是一個文件。我的代碼的目標是刪除所有寫有「loc。」的行,以便只保留摘錄。我的目標也可以被視爲刪除空白行之前的行。

到目前爲止我的代碼如下所示:

f = open('clippings_export.txt','r', encoding='utf-8') 
message = f.read() 
line=message[0:400] 
f.close() 

key=["l","o","c","."," "] 


for i in range(0,len(line)-5): 
    if line[i]==key[0]: 
     if line[i+1]==key[1]: 
      if line[i + 2]==key[2]: 
       if line[i + 3]==key[3]: 
        if line[i + 4]==key[4]: 

最後if找到了完全符合其中每個「同上。」位於文件中的位置(索引)。儘管如此,在這個階段之後,我不知道如何回到行中,以便代碼捕獲行開始的位置,並且可以完全刪除。接下來我可以做什麼?你是否推薦我另一種方法來刪除這條線?

在此先感謝!

回答

3

我認爲這個問題可能有點誤導!

無論如何,如果你只是想刪除這些行,你需要檢查它們是否包含「loc」。子。最簡單的方法可能是使用in operator

而不是從讀取整個文件()函數,逐行讀取文件(例如使用readlines() function)。然後你可以檢查它是否包含你的密鑰,如果它包含,就省略它。

由於結果是現在的字符串列表,您可能想合併它:str.join()

這裏我用另一個列表來存儲所需的行,你也可以使用「更pythonic」filter()或列表理解(下面提到的類似問題中的例子)。

f = open('clippings_export.txt','r', encoding='utf-8') 
lines = f.readlines() 
f.close() 

filtered_lines = [] 
for line in lines: 
    if "loc." in line: 
     continue 
    else: 
     filtered_lines.append(line) 

result = "" 
result = result.join(filtered_lines) 

順便說一句,我想這可能是一個重複的 - Here's question about the opposite(即希望包含的關鍵線)。

+0

嗨阿德里安。這個問題可能有點誤導,但你的答案完美無缺!事情是,我不知道關於命令截止日期的任何事情(我只知道read())。非常感謝! –

+0

這就是爲什麼沒有人回答它,我可以得到我的第一個答案:) 我很高興我可以幫助! – Adrian