python - 如果不满足条件,则在导入 txt 文件时合并行
问题描述
ROW_ID|Quote Number|Status|Status Reason ADT|Name|Account|Alias ADT|......etc 418 Columns
我有一个大的管道分隔文件,大约 200 万行 (2gs)。该文件应该每行有 418 列 (|),但是,许多行已不必要地拆分,导致导入数据时出现问题。
导入时,我想合并行,直到下一行中的管道数 == 418。
大多数问题发生在第 90 列,然后是一行 328。其他问题在 90 处拆分,然后是几行 0,然后是 328。理想情况下,所有这些行都将合并为一个。
我曾考虑将不正确的行附加到列表中,然后将它们组合起来,但以每行 1 秒计算,这大约需要 26 天才能完成。
我也尝试在追加之前合并这些行,但恐怕我会遇到同样的效率问题。
%%time
correct = []
incorrect = []
with open('C:/Users/jschlajo/Desktop/export_all_quotes_compass.txt', 'r') as fh:
for index, line in enumerate(fh):
if index<20:
if line.count('|')!=418:
incorrect.append(line)
解决方案
当您使用 Enumerate 时它会打开,它需要更长的时间。我删除了那部分代码,将所有问题行附加到一个列表中。与我预期的 26 天相比,它花了 34 秒。然后我加入了整个列表,并每隔 418 个管道拆分列表
correct = []
incorrect = []
with open('C:/Users/jschlajo/Desktop/export_all_quotes_compass.txt', 'r') as fh:
for line in fh:
if line.count('|')==418:
correct.append(line)
if line.count('|')!=418:
incorrect.append(line)
test_1 = ' '.join(incorrect)
i = iter(test_1.split('|'))
span = 418
words = test_1.split("|")
combined = ["|".join(words[i:i+span]) for i in range(0, len(words), span)]
推荐阅读
- sql - Postgres:有条件地添加到表中
- c# - 第二个摄像头的 Unity 摄像头平移不起作用
- r - 汇总表中重复测量方差分析的唯一行
- wcf - WCF WebSocket 服务需要安全 TLS/SSL WSS
- regex - Raku 中的否定命名正则表达式或字符类插值
- reactjs - 过滤组件中的 useContext 状态而不更改全局状态
- ruby-on-rails - 如何在标签中使用嵌套属性的翻译,以便我只维护一个翻译?
- reactjs - 在 React 应用程序中,前端是接收原始的 React 代码还是纯 html?
- javascript - 将 React/javascript 字符串对象数组转换为对象数组
- sql - 在同一个表中合并 SQL 查询