将类CSV字符串格式数据转为Pandas DataFrame(大文件适配)
问题解决:CSV转空格分隔表格(40MB文件处理)
原代码错误分析
- StringIO使用错误:你用
StringIO("12test.txt")是把字符串"12test.txt"当成文件内容传给read_csv,而非读取实际文件,导致读取的DataFrame为空或无效。read_csv可直接接收文件路径,无需StringIO包裹。 - DataFrame调用字符串方法:
a.split('\n')完全错误,a是DataFrame对象,没有split方法——该方法仅属于字符串类型。 - 分割符错误:
row.split('.')用点作为分割符,但你的数据是逗号分隔,且不需要按点拆分。
解决方案一:Pandas正确处理(适合40MB文件)
40MB的CSV文件用Pandas处理完全没问题,以下是修正后的代码:
import pandas as pd # 直接读取文件,header=None表示文件无预设表头 df = pd.read_csv("12test.txt", sep=",", header=None, error_bad_lines=False) # 移除每行开头的无用数字列(索引为0的列) df = df.drop(columns=0) # 将第一行设置为表头,后续行作为数据 df.columns = df.iloc[0] df = df[1:] # 重置索引(可选,让索引从0开始) df = df.reset_index(drop=True) # 输出为空格分隔的格式,与目标结构一致 print(df.to_csv(sep=" ", index=False, header=True))
解决方案二:逐行处理(极端内存不足时用)
如果内存确实紧张,用原生文件操作逐行处理,内存占用极低:
# 逐行读取并处理,避免一次性加载整个文件 output_content = [] with open("12test.txt", "r", encoding="utf-8") as input_file: for line_num, line in enumerate(input_file): # 去掉换行符,按逗号分割每个字段,同时去掉字段两端的引号 processed_fields = [field.strip('"') for field in line.strip().split(',')] # 移除第一个无用的数字字段 cleaned_fields = processed_fields[1:] if line_num == 0: # 第一行作为表头,用双空格分隔 output_content.append(' '.join(cleaned_fields)) else: # 数据行同样用双空格分隔 output_content.append(' '.join(cleaned_fields)) # 打印结果 print('\n'.join(output_content)) # 若要保存到文件,取消下面注释: # with open("output_table.txt", "w", encoding="utf-8") as output_file: # output_file.write('\n'.join(output_content))
内容的提问来源于stack exchange,提问作者Kirana
相关产品推荐
相关产品推荐

