【问题标题】:how can i replace spaces and detect the empty data in a line in txt file?如何替换空格并检测 txt 文件中一行中的空数据?
【发布时间】:2020-11-12 17:02:33
【问题描述】:
NAME         ADDRESS:COUNTRY              AGE                        JOB                 EMAIL
BART         RF_STREET:USA                66                         ENGINEER            BART@YAHOO
KYLE         78_STREET:AUS                                                               KYLE@GOOGLE
WILLIE       6_STREET:AUS                                                                WILLIE@GOOGLE
TRIPP        H_STREET:NZ                  55                         DOCTOR              TRIPP@YAHOO
. 
.
.

我有一个类似于上面的 txt 文件。我尝试将空格替换为 , 并且不删除空数据,例如 KYLE 和 WILLIW 的 AGEJOB;因此下面是代码

input_file = open('A.txt', mode='r')
input_read=input_file.readlines()
input_file.close()

data=[]
for i in input_read:
    data.append(i.split())

我上面代码的输出是

NAME,ADDRESS:COUNTRY,AGE,JOB,EMAIL
BART,RF_STREET:USA,66,ENGINEER,BART@YAHOO
KYLE,78_STREET:AUS,KYLE@GOOGLE
WILLIE,6_STREET:AUS,WILLIE@GOOGLE
TRIPP,H_STREET:NZ,55,DOCTOR,TRIPP@YAHOO
.
.
.

同时我想要的输出是

NAME,ADDRESS:COUNTRY,AGE,JOB,EMAIL
BART,RF_STREET:USA,66,ENGINEER,BART@YAHOO
KYLE,78_STREET:AUS,,,KYLE@GOOGLE
WILLIE,6_STREET:AUS,,,WILLIE@GOOGLE
TRIPP,H_STREET:NZ,55,DOCTOR,TRIPP@YAHOO
. 
.
.

【问题讨论】:

  • 文件制表符分隔的 csv 文件吗?如果是这种情况,您可以直接使用 csv 模块读取而不需要任何修改。
  • @ThuYeinTun 不,它在 txt 文件中。

标签: python


【解决方案1】:

这是一种方法,根据标题列的宽度拆分所有行:

import re

# ... open file
input_read = input_file.readlines()

colBreaks = [0] + [m.end() for m in re.finditer(r"\s{2,}", input_read[0])]

data = []
for line in input_read:
    data.append([line[i:j].strip() for i, j in zip(colBreaks, colBreaks[1:] + [None])])

print([','.join(result) for result in data])

r"\s{2,}" 分割意味着标题中最多可以有 1 个空格,这仍然可以正常工作。

输出:

['NAME,ADDRESS:COUNTRY,AGE,JOB,EMAIL', 
'BART,RF_STREET:USA,66,ENGINEER,BART@YAHOO', 
'KYLE,78_STREET:AUS,,,KYLE@GOOGLE', 
'WILLIE,6_STREET:AUS,,,WILLIE@GOOGLE', 
'TRIPP,H_STREET:NZ,55,DOCTOR,TRIPP@YAHOO']

感谢 this answerthis answer 提供有用的单行代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多