2016-09-29 125 views
2

是新來的Python的名單,但我有這樣的文本文件:的Python:拆分文本行

12345 | 6789 | abcd | efgh 

我希望我的輸出如:

12345 
6789 
abcd 
efgh 

====== ===============

我真的不知道腳本 但我做了很多腳本通過那些函數split(),strip(),怪責怪責怪

但我沒有做到 所以我尋求幫助是有人可以。

我會感謝任何幫助。

with open('contacts_index1.txt') as f: 
    lines = f.read().splitlines("|") 
+4

什麼錯誤,你是否完全得到的問題? – MooingRawr

+0

真正的代碼是:'f.readlines()'然後遍歷它們全部在'|'上分割 –

+0

'Traceback(last recent call last): 文件「C:\ Users \ TOSHIBA \ Desktop \ findme.py」,第4行,在 r = f.read() 文件「C:\ Users \ TOSHIBA \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ encodings \ cp1252.py「,第23行解碼 返回codecs.charmap_decode(input,self.errors,decode_table)[0] UnicodeDecodeError:'charmap'編解碼器無法解碼位置529中的字節0x81:字符映射到' –

回答

0

從所有的評論,它看起來像問題與文件中的實際文本做的,而不是解析它的能力。看起來大家在這裏的解決方案是正確的,你只需要強制編碼。

您所描述的錯誤描述爲in this other StackOverflow post

with open('contacts_index1.txt', 'r') as f: 
    lines = f.read().encode("utf-8").replace("|", "\n") 

編輯:問題似乎是一個討厭的字符,沒有正確解碼。用open可以讓它忽略它無法解碼的字符。

import io 
with io.open("contacts_index1.txt", errors="ignore") as f: 
    lines = f.read()replace("|", "\n") 
+0

您正確的兄弟。 但它仍然給了我同樣的錯誤,我不知道。我能做什麼 ! –

+1

我也將文件保存爲「UTF-8」,並且錯誤仍然出現 –

+0

請嘗試在該鏈接中的解決方案。您顯示的錯誤是使用編碼「CP1252」加載。所以必須有一種方法來強制它使用不同的編碼(如utf-8)進行讀取。 'import io' 'io.open('contacts_index1.txt',encoding =「utf-8」)'OR'io.open('contacts_index1.txt',encoding =「latin-1」)' – TheF1rstPancake

0

與代碼中的一些問題,你貼:

  • f.read不讀整行。它應該是f.readline()
  • 什麼是功能splitlines

你的問題在不同的方面很不清楚。也許這個片斷可能會有所幫助:

for line in open('contacts_index1.txt'): 
    elements = line.split('|') 
    for element in elements: 
     print element.strip() 

Editted:我不知道這個功能splitlines。剛看了一下。無論如何,你在代碼中使用它的方式似乎並不正確。

+0

並且您的代碼給了我那個錯誤 '回溯(最近調用最後一次): 文件「C:\ Users \ TOSHIBA \ Desktop \ csvfind.py」 ,第1行,在 中用於打開行('contacts_index1.txt'): 解碼後的第23行文件「C:\ Users \ TOSHIBA \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ encodings \ cp1252.py」 return codecs.charmap_decode(input,self.errors,decoding_table) [0] 的UnicodeDecodeError:「字符映射」編解碼器不能在529位解碼字節0×81:字符映射爲' –

+0

很抱歉,我的肉line.split() –

0

我強烈建議使用csv模塊來處理這類任務,因爲它看起來像一個csv類型的文件,使用'|'作爲分隔符:

import csv 
with open('contacts_index1.txt','r') as f: 
    reader=csv.reader(f,delimiter='|') 
    for row in reader: 
     #do things with each line 
     print "\n".join(row) 
+0

我已經嘗試了CSV也但這裏的錯誤 '回溯(最近一次通話最後一次): 文件「C:\ Users \ TOSHIBA \ Desktop \ csvfind.py」,第4行, 對於閱讀器中的行: 文件「C:\ Users \ TOSHIBA \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ encodings \ cp1252.py「,第23行,解碼爲 return codecs.charmap_decode(input,self.errors,decode_table)[0] UnicodeDecodeError:'charmap'編解碼器無法解碼位置529中的字節0x81:字符映射到' –

1

您將不得不使用解碼。下面的代碼將工作:

def dataFunction(filename): 
    with open(filename, encoding="utf8") as f: 
     return f.read() 

調用此函數的文件名作爲參數:

Contents = dataFunction(filename) 
elements = Contents.split("|") 
for element in elements: 
     print(element) 
+0

對不起,我不明白我究竟做了什麼? –

+0

上午再次抱歉,但它給了我: '回溯(最近通話最後一個): 文件 「C:\用戶\ TOSHIBA \桌面\ hope.py」,4號線,在 內容= dataFunction的( 「contacts_index1.txt」) 文件「C:\ Users \ TOSHIBA \ Desktop \ hope.py」,第3行,在dataFunction中 返回f.read()。decode('utf-8') 文件「C:\用戶\ TOSHIBA \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ encodings \ cp1252.py「,第23行解碼 返回codecs.charmap_decode(input,self.errors,decode_table)[0] UnicodeDecodeError: 'charmap'編解碼器無法解碼位置529中的字節0x81:字符映射到' –

+0

檢查出我有 更新!如果不工作評論...!我想幫助你! – PassionInfinite

0

請通過線做這一行。無需一次讀取整個文件。

喜歡的東西:

with open(file_name) as f_in: 
    for line in f_in: 
     for word in line.split('|'): 
      print word.strip() 

如果是unicode的問題,大部分的時間,它是自動:

$ cat /tmp/so.txt 
12345 | 6789 | abcd | éfgh 

(注意在文件中é

上面的程序工作。如果它不工作,使用的編解碼器:

with open(fn) as f_in: 
    for line in f_in: 
     line=line.decode('utf-8') # or whatever codec is used for that file... 
     for word in line.split('|'): 
      print word.strip() 

有了Python3,剛剛設置的編碼,當你打開文件:

with open(fn, encoding='utf-8') as f_in: # <= replace with the encoding of the file... 
    for line in f_in: 
     for word in line.split('|'): 
      print(word.strip()) 
+0

@dwg謝謝,兄弟 它與一個工作。 但另一個有編碼問題。所以我仍然停留在這個解碼問題上。 –

+0

現在這是你的代碼工作兄弟。謝謝你 –

+0

如果這是一個編碼問題,只需打開一個適當的編解碼器。 – dawg