【问题标题】:line split - how can I retain columns with missing values行拆分-如何保留缺少值的列
【发布时间】:2020-04-05 14:30:03
【问题描述】:

我正在处理一个表单输出,其中所有字段都不是必须填写的。我正在将值读入字典,将其拆分,然后进行一些处理。但是,我发现当缺少值时,整个列都会被删除。因此,在下面的示例中,由于该记录缺少 EndMonth、EndDay、EndYear 的数据 - 这三列从输出中删除,即使其他记录有数据。

FirstName       Oliver
LastName        Twist
PhoneNumber     8111456789
EmailAddress    xjk@py.com
StartMonth       2
StartDay 3
StartYear        2020
EndMonth
EndDay
EndYear

我的代码是这样的......我如何用“空白”或“NA”之类的东西替换缺失的值,以确保没有记录被丢弃。我确信这很容易,但我是一个 python 新手,所以很挣扎

file=open("ztest.txt", "r")
dict_vals={}
for line in file:
    if line.rstrip():
        split_line=line.split()
.....

谢谢

【问题讨论】:

  • 查看split_line的长度;如果少于两个,则附加您的 占位符StartDay 3 不过会是个问题 - 你可能想在 more-than-one-space 上拆分。
  • 谢谢。我会试一试
  • 我相信StartDay 3 应该被解释为它上面的行; StartDay 是键,3 是值。 OP可能会纠正我:)

标签: python


【解决方案1】:

如果没有与键关联的值,line.split() 将只有长度 1:

'FirstName       Oliver'.split()  # ['FirstName', 'Oliver']
'EndDay    '.split()  # ['EndDay']

所以逻辑可能是这样的:

split_line=line.split()
if len(split_line) == 1:
    split_line.append('NA')

其他可能的改进:明确定义要拆分的字符,可以避免以后出现错误。在您的情况下,' ''\t' 应该可以。

【讨论】:

  • 所有 - 非常感谢。该解决方案效果很好。现在谈另一个问题。我正在尝试将输出加载到 Oracle 表中。安装了 cx_Oracle 但得到一个 oracle library not found 错误。弄清楚这一点
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 2016-09-29
相关资源
最近更新 更多