鱼C论坛

 找回密码
 立即注册
查看: 2237|回复: 7

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

[复制链接]
发表于 2020-6-2 04:34:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用pandas读取txt文件
  1. import pandas as pd

  2. rec1=pd.read_csv('d://data//3.txt',sep='<->')
  3. 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不能设多字符的分隔符吗?
最佳答案
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个字段。错误可能是由于使用多字符分隔符时忽略了引号。


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

1231.png

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-2 07:11:54 | 显示全部楼层
pd.read_csv还可以读TXT的么?我都有点搞不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 07:19:55 | 显示全部楼层
xiaosi4081 发表于 2020-6-2 07:11
pd.read_csv还可以读TXT的么?我都有点搞不明白

csv本质就是txt文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-2 07:21:27 | 显示全部楼层
Tip0 发表于 2020-6-2 07:19
csv本质就是txt文件

知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 07:22:16 | 显示全部楼层
把txt先读取了,再去分不香吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 07:23:12 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-6-2 07:25 编辑
  1. import pandas as pd

  2. rec1=pd.read_csv('d://data//3.txt')
  3. rec1=rec1.replace('<->','\n')
  4. print(rec1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 07:32:28 | 显示全部楼层

加上这个试试吧 error_bad_lines=False

  1. import pandas as pd

  2. rec1=pd.read_csv('d://data//3.txt',sep='<->',error_bad_lines=False)
  3. print(rec1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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个字段。错误可能是由于使用多字符分隔符时忽略了引号。


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

1231.png

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 02:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表