lemon_wb 发表于 2020-6-2 04:34:12

用pandas读取多字符分隔的txt文件报错,不知道怎么改正

用pandas读取txt文件
import pandas as pd

rec1=pd.read_csv('d://data//3.txt',sep='<->')
print(rec1)

需要读取的txt文件如下:
OPERATIONROLENAME<->PHYRES_TYPE_NAME<->PHYRES_SPEC_NAME<->PHYRES_CODE<->NEW_OR_OLD<->PHYRES_GETWAY_NAME<->MARKETINGPLANNAME<->PREFERPOLI_NAME<->AMOUNT<->ACTTYPENAME<->STARTLIFECYCLE<->CUST_CODE<->OPERATIONROLES_NAME<->HIGH_FLAG<->INTER_FLAG<->ONLY_BROAD<->BUILD_TYPE_NAME<->SERVICE_TYPE_NAME<->MANAGESECTION_CODE<->ORDER_TYPE_NAME<->WORKORDER<->IC_CARD_CODE
钢分公司<->机顶盒<->高清双向机顶盒<->LC23011333000<->旧<-><-><->无优惠<->0<->取消产品-产品取消单<->29-MAY-20<->01430001624<->钢分公司<->高清<->双向<->非单宽带<-><->(B)数字单向<->JS.JG.0001006<->产品取消单<-><->-1
钢分公司<->智能卡<->IC卡<->9937000000003<->旧<-><-><->无优惠<->0<->取消产品-产品取消单<->29-MAY-20<->01430001624<->钢分公司<-><-><->非单宽带<-><->(B)数字单向<->JS.JG.0001006<->产品取消单<-><->-1
钢分公司<->智能卡<->IC卡<->9937000000000<->旧<-><-><->无优惠<->0<->取消产品-产品取消单<->29-MAY-20<->01430008686<->钢分公司<-><-><->非单宽带<-><->(B)数字单向<->JS.JG.0001004<->产品取消单<-><->-1
钢分公司<->智能卡<->IC卡<->9937000000000<->旧<-><-><->无优惠<->0<->取消产品-产品取消单<->29-MAY-20<->01430008675<->钢分公司<-><-><->非单宽带<-><->(B)数字单向<->JS.JG.0001004<->产品取消单<-><->-1

觉得应该挺简单的,可是程序报错,报错信息如下:
D:/Users/Administrator/PycharmProjects/untitled/tt.py:3: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.
rec1=pd.read_csv('d://data//29-31.txt',sep='<->')
Traceback (most recent call last):
File "D:/Users/Administrator/PycharmProjects/untitled/tt.py", line 3, in <module>
    rec1=pd.read_csv('d://data//29-31.txt',sep='<->')
File "D:\ProgramData\Anaconda3\envs\untitled\lib\site-packages\pandas\io\parsers.py", line 676, in parser_f
    return _read(filepath_or_buffer, kwds)
File "D:\ProgramData\Anaconda3\envs\untitled\lib\site-packages\pandas\io\parsers.py", line 454, in _read
    data = parser.read(nrows)
File "D:\ProgramData\Anaconda3\envs\untitled\lib\site-packages\pandas\io\parsers.py", line 1133, in read
    ret = self._engine.read(nrows)
File "D:\ProgramData\Anaconda3\envs\untitled\lib\site-packages\pandas\io\parsers.py", line 2458, in read
    alldata = self._rows_to_cols(content)
File "D:\ProgramData\Anaconda3\envs\untitled\lib\site-packages\pandas\io\parsers.py", line 3113, in _rows_to_cols
    self._alert_malformed(msg, row_num + 1)
File "D:\ProgramData\Anaconda3\envs\untitled\lib\site-packages\pandas\io\parsers.py", line 2872, in _alert_malformed
    raise ParserError(msg)
pandas.errors.ParserError: Expected 22 fields in line 2191, saw 43. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.

向各位大神求助,实在看不懂错误提示,在百度上搜也搜不出来有用的答案。提示好像是说我的分隔符是多字符的,引用被忽略。
可这是什么意思?sep不能设多字符的分隔符吗?{:5_111:}

xiaosi4081 发表于 2020-6-2 07:11:54

pd.read_csv还可以读TXT的么?我都有点搞不明白

Tip0 发表于 2020-6-2 07:19:55

xiaosi4081 发表于 2020-6-2 07:11
pd.read_csv还可以读TXT的么?我都有点搞不明白

csv本质就是txt文件

xiaosi4081 发表于 2020-6-2 07:21:27

Tip0 发表于 2020-6-2 07:19
csv本质就是txt文件

知道了

xiaosi4081 发表于 2020-6-2 07:22:16

把txt先读取了,再去分不香吗

xiaosi4081 发表于 2020-6-2 07:23:12

本帖最后由 xiaosi4081 于 2020-6-2 07:25 编辑

import pandas as pd

rec1=pd.read_csv('d://data//3.txt')
rec1=rec1.replace('<->','\n')
print(rec1)

Twilight6 发表于 2020-6-2 07:32:28


加上这个试试吧 error_bad_lines=False

import pandas as pd

rec1=pd.read_csv('d://data//3.txt',sep='<->',error_bad_lines=False)
print(rec1)

Twilight6 发表于 2020-6-2 07:44:40

本帖最后由 Twilight6 于 2020-6-2 07:46 编辑

Expected 22 fields in line 2191, saw 43. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.
第2191行有22个字段,第43行有43个字段。错误可能是由于使用多字符分隔符时忽略了引号。

是你文本内容有问题,你发出来 的部分内容 我可以正常打开



你可以手动打开,看看源文件的 那几行,肯定是多了几个 <-> 这样的符号

解决方法自己手动删除报错行,或者 error_bad_lines=False 设置跳过报错行

页: [1]
查看完整版本: 用pandas读取多字符分隔的txt文件报错,不知道怎么改正