2016-09-29 77 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