2017-09-29 172 views
2

我需要讀取管道(|)分隔的文本文件。 其中一個字段包含可能包含雙引號的說明。 我注意到包含「的所有行在接收字典中缺失 爲了避免這種情況,我嘗試讀取整行,並使用string.replace()將其刪除,如下所示,但它看起來像這些引號的出現在讀取線程階段造成了問題,即在string.replace()方法之前。刪除文本文件中的引號

代碼在下面,問題是'如何強制python不使用任何分隔符並保持整條線?「。

with open(fileIn) as txtextract: 
    readlines = csv.reader(txtextract,delimiter="µ") 
    for line in readlines: 
     (...) 
     LI_text = newline[107:155] 
     LI_text.replace("|","/") 
     LI_text.replace("\"","") # use of escape char don't work. 

注:我使用的3.6

版本
+2

'replace'不會替換到位。您必須將結果返回給變量:'LI_text = LI_text.replace(「|」,「/」)' – schwobaseggl

+0

[Python解析CSV忽略逗號與雙引號]的可能重複(https://stackoverflow.com/問題/ 21527057/python-parse-csv-ignore-comma-with-double-quotes) –

+0

這是由於「替換到位」問題。我將修改過的文本存儲回變量中,並且工作正常。 – JCF

回答

2

您可以使用正則表達式

In [1]: import re 

    In [2]: re.sub(r"\"", "", '"remove all "double quotes" from text"') 
    Out[2]: 'remove all double quotes from text' 

    In [3]: re.sub(r"(^\"|\"$)", "", '"remove all "only surrounding quotes" from text"') 
    Out[3]: 'remove all "only surrounding quotes" from text' 

或添加quote='"'quoting=csv.QUOTE_MINIMAL選項csv.reader(),如:

with open(fileIn) as txtextract: 
     readlines = csv.reader(txtextract, delimiter="µ", quote='"', quoting=csv.QUOTE_MINIMAL) 
     for line in readlines: 
      (...) 
0

課:方法string.replace()不會更改字符串本身。修改過的文本必須存回(string = string.replace())