如何配置pandas.read_csv将"视为普通字符而非引号字符以读取大型TXT文件
嘿,这个问题我刚好碰到过!说白了就是pandas默认的引号解析机制在搞鬼——它会把双引号包裹的内容当成一个完整字段,哪怕里面有分隔符。要解决这个问题,关键就是完全禁用引号解析,或者让pandas把双引号当成普通字符处理。
给你两种可行的方案:
方案一:禁用引号解析(需导入csv模块)
我们可以用csv.QUOTE_NONE参数告诉pandas别处理任何引号,这样双引号就会被当作普通字符对待。如果你的文件是用空白(空格、制表符)分隔单词的,还得设置正则分隔符和python引擎(c引擎不支持正则分隔符):
import pandas as pd import csv # 读取文件,禁用引号解析,按任意空白分割单词 df = pd.read_csv( filepath, header=None, delimiter=r'\s+', # 匹配任意数量的空白字符(空格、制表符等) engine='python', # 必须用python引擎才能支持正则分隔符 quoting=csv.QUOTE_NONE # 完全禁用引号解析逻辑 ) # 把所有列的单词堆叠成每行一个的DataFrame final_df = df.stack().reset_index(drop=True).to_frame(name='word')
方案二:指定一个不存在的引号字符(无需导入csv)
如果不想额外导入csv模块,可以把quotechar设成一个文件里绝对不会出现的字符(比如空字符\x00),这样pandas找不到要解析的引号,自然就把双引号当成普通字符了:
import pandas as pd df = pd.read_csv( filepath, header=None, delimiter=r'\s+', engine='python', quotechar='\x00' # 用一个不存在的字符当引号标记,等于禁用引号解析 ) final_df = df.stack().reset_index(drop=True).to_frame(name='word')
如果是要每个字符单独占一行
要是你的需求是把每个字符(包括双引号)都单独放在一行,那可以换个思路,先读取整个文件内容再拆分:
# 先读取文件所有内容为字符串 with open(filepath, 'r', encoding='utf-8') as f: content = f.read() # 把每个字符拆分成单独一行 char_df = pd.Series(list(content)).to_frame(name='character')
这样就能完美解决双引号被误解析的问题啦!
内容的提问来源于stack exchange,提问作者abc123
相关产品推荐
相关产品推荐

