"""
相信大家在用pandas读取csv文件时会遇到一些问题,比如本来文件有2000行,
可读取时有1500行,剩下的怎么也都不了,还会出现乱码,超出范围等问题,经
过我的思考,我发现这是引号造成的,有的地方有成对的引号,有的地方没有引
号,还有的行有3个引号,或彼此不成对,或有一个引号落单。并且这些引号出
现的位置随机,即使你设置 quoting=3 也没有用,这只能针对一个落单的
引号,我想出了一个解决办法。
"""
#首先,用pandas方法打开csv文件
import pandas as pd
f=pd.read_csv("Starbucks.txt")
#如果上述代码报错,显示编码问题,可以连续试试下面的代码
f=pd.read_csv("Starbucks.txt",encoding="utf-8")
#记住,如果还是编码错误,就更改encoding为 utf-16
# 或utf-32, gbk, gb2312
#如果都显示编码错误,再换成如下代码
f=pd.read_csv("Starbucks.txt")
如果在运行台看见下面的字样
按提示把原文件的18-19(我这里是这样)行剪切再粘回去,就可以正常打开文件了。如果还不行,就只能另寻他法。
接着,把原csv文件改成txt后缀
# 处理引号不规则出现的问题
# 打开修改的txt文件
with open("Starbucks.txt", 'r', encoding='utf-8') as f:
# 创建新文件,设置名字,编码方式
with open('happy.txt', 'w', encoding='utf-8') as f1:
# 遍历原文件的每一行
for line in f.readlines():
# 去除换行符
line = line.strip('\n')
# 按照引号分割文件,同时去除空字段(对应2个引号连在一起的情况)
# 去除字段两边的逗号(对应两个引号间夹杂的逗号和引号外的逗号)
# 做成列表,存储到a变量
a = [x.strip(',') for x in line.split('"') if len(x) > 0 and x != ',']
# 以下的分类筛选对应于引号出现的各种情况
# 如果仍有引号问题,则在此基础上加上别的分类情况
# 我用新的分隔符 ’|‘ 替代源文件的 ’,‘
if len(a) == 5:
a[0] = a[0].replace(',', '|')
a[2] = a[2].replace(',', '|')
a[4] = a[4].replace(',', '|')
b = '|'.join(a)
elif len(a) == 3:
a[0] = a[0].replace(',', '|')
a[2] = a[2].replace(',', '|')
b = '|'.join(a)
# 对应于一对引号
elif len(a) == 2:
a[0] = a[0].replace(',', '|')
a[1] = a[1].replace(',', '|')
b = '|'.join(a)
# 对应与一行只有1个落单的引号
elif len(a) == 1:
a[0] = a[0].replace(',', '|')
b = '|'.join(a)
# 其他情况,自己根据需要加上
# else:
# for i in a:
# i.replace(',','|')
# b='|'.join(a)
# 写入到文件中,一定要加上换行符,行与行会连在一起
f1.write(b + '\n')
"""
到这里,处理步骤结束,可以摆脱烦人的引号问题了。
然后再改txt后缀为csv后缀即可
然后再正常用pandas的方法读取文件,即可
"""