如何跳过CSV已迭代行?分两次写入分段CSV数据遇阻求助
原代码的问题
- 每次循环都重新读取原文件的前50行,没有跳过已处理的内容,第二次循环还是读的前50条,不是后续的记录。
- 写入
newFile.csv时默认用覆盖模式(mode='w'),第二次循环会直接覆盖第一次的内容,就算读对了行也没用。 newData = newData.iloc[50:]完全无效,下一次循环会重新给newData赋值,这个修改不会影响后续读取操作。
修复方案
方案一:分批次读取原文件(适合大文件)
如果原文件体积大,不想一次性加载到内存,可以用skiprows控制每次读取的起始位置,搭配追加模式写入:
import pandas as pd for i in range(2): skip_count = i * 50 # 第一次读取不跳行,正常识别表头;第二次跳前50行,读取时不把第一行当表头 chunk = pd.read_csv( 'oldFile.csv', skiprows=skip_count, nrows=50, header=None if skip_count != 0 else 0 ) # 第一次用覆盖模式写表头,第二次用追加模式不重复写表头 chunk.to_csv( 'newFile.csv', index=False, mode='a' if i != 0 else 'w', header=False if i != 0 else True )
方案二:一次性读取后分块写入(适合小文件)
如果文件不大,直接一次性读入内存再切片写入更简单:
import pandas as pd # 一次性读取所有数据 all_data = pd.read_csv('oldFile.csv') for i in range(2): start_idx = i * 50 end_idx = start_idx + 50 # 截取对应区间的行 chunk = all_data.iloc[start_idx:end_idx] # 控制写入模式和表头 chunk.to_csv( 'newFile.csv', index=False, mode='a' if i != 0 else 'w', header=False if i != 0 else True )
内容的提问来源于stack exchange,提问作者Ateeq
相关产品推荐
相关产品推荐

