python-3.x - 如何分隔从文本文件中读取的数据行?客户与他们的订单
问题描述
我在文本文件中有这些数据。(为了清楚起见,我没有添加间距)
我正在使用 Python3:
orders = open('orders.txt', 'r')
lines = orders.readlines()
我需要遍历包含所有数据行的 lines 变量,并在分隔 CO 行时将它们分开。CO 是客户,每个 CO 下方的行是客户下的订单。
如果您查看 CO 字符串的索引 [7-9],CO 行告诉我们存在多少行订单。我在下面说明了这一点。
CO77812002D10212020 <---(002)
125^LO917^11212020. <----line 1
235^IL993^11252020 <----line 2
CO77812002S10212020
125^LO917^11212020
235^IL993^11252020
CO95307005D06092019 <---(005)
194^AF977^06292019 <---line 1
72^L223^07142019 <---line 2
370^IL993^08022019 <---line 3
258^Y337^07072019 <---line 4
253^O261^06182019 <---line 5
CO30950003D06012019
139^LM485^06272019
113^N669^06192019
249^P530^07112019
CO37501001D05252020
479^IL993^06162020
我已经想到了一种蛮力的方式来做到这一点,但它不适用于更大的数据集。
任何帮助将不胜感激!
解决方案
您可以使用fileinput
( source ) “同时”读取和修改您的文件。事实上,在解析文件时提供修改文件的就地功能是通过第二个备份文件实现的。具体来说,如此处所述:
可选的就地过滤:如果将关键字参数 inplace=True 传递给 fileinput.input() 或 FileInput 构造函数,则文件将移动到备份文件,标准输出将通过以下方式定向到输入文件 (...)默认情况下,扩展名是“.bak”,当输出文件关闭时它会被删除。
因此,您可以按照以下方式指定文件格式:
import fileinput
with fileinput.input(files = ['orders.txt'], inplace=True) as orders_file:
for line in orders_file:
if line[:2] == 'CO': # Detect customer line
orders_counter = 0
num_of_orders = int(line[7:10]) # Extract number of orders
else:
orders_counter += 1
# If last order for specific customer has been reached
# append a '\n' character to format it as desired
if orders_counter == num_of_orders:
line += '\n'
# Since standard output is redirected to the file, print writes in the file
print(line, end='')
注意:假设带有订单的文件完全按照您指定的方式格式化:
CO...
(order_1)
(order_2)
...
(order_i)
CO...
(order_1)
...
推荐阅读
- google-bigquery - 使用命令将数据库(具有嵌套文档)从 Cloud Firestore 导出到 Bigquery
- wordpress - 推荐在销售仪表板上需要 Wordpress 插件
- ios - Tableview Cells问题内的UIVisualEffectView
- sql - 更改 SQL Server 名称导致客户端 PC 无法连接到服务器
- mysql - Sql删除具有复合主键的孤立记录
- python - 从numpy数组中删除小于1的元素
- javascript - 如何在 JavaScript 中取消设置 PHP 元素?
- c# - 读取 JSON 文件会将项目添加到同一类的另一个属性的列表中
- mysql - 有没有办法让 AWS RDS Public Accessibility = No 但仍然可以在 EC2 实例之外访问?
- c# - C# 数据读取器值在调试时重复多次