【问题标题】:Python: Parse a line and exclude last token [closed]Python:解析一行并排除最后一个标记[关闭]
【发布时间】:2013-11-06 20:40:41
【问题描述】:

我有一个关于 Python 中的行解析的非常简单的问题。

我有一个包含以下行的文件:

MV0346FDG-PFHTGE-CFSGD-22205-C0

MV0346FDG-PFHTGE-CFSGD-22205-34354-FHHTRW-0

MV0346FDG-PFHTGE-CFSGD-DTRHG-22205-AA1

我需要将这些行保存到一个新文件中,不包括最后一个“-”之后的字符。

结果如下:

MV0346FDG-PFHTGE-CFSGD-22205

MV0346FDG-PFHTGE-CFSGD-22205-34354-FHHTRW

MV0346FDG-PFHTGE-CFSGD-DTRHG-22205

如何编码?

【问题讨论】:

  • 检查打开、写入和拆分,你会很成功。

标签: python parsing tokenize


【解决方案1】:

你也可以使用rsplit():

for line in infile:
    token, _ = line.rsplit('-', 1)
    outfile.write(token + '\n')

【讨论】:

  • 非常感谢!!完美运行!!
【解决方案2】:

只需 find the last instance of '-' 并将其切掉

q = 'MV0346FDG-PFHTGE-CFSGD-22205-C0'
q[:q.rfind('-')]
'MV0346FDG-PFHTGE-CFSGD-22205'

请参阅here 了解有关文件读/写的信息

【讨论】:

  • 为什么要让自己变得更难? rpartitionrsplit 更简单,并且无法意外写入一个错误的错误,而rpartition 甚至在给出意外的空行时无法读取末尾。
【解决方案3】:

Python 字符串有很好的方法来拆分成更小的字符串,因此无需搜索字符并对其进行切片。您可以看到所有这些方法here,或者只需在交互式终端中输入help(str)

所以:

with open(inpath) as infile, open(outpath, 'w') as outfile:
    for line in infile:
        main, hyphen, last = line.rpartition('-')
        outfile.write(main + '\n')

【讨论】:

    【解决方案4】:

    你也可以使用rfind

    for line in file:
        outfile.write(line[:line.rfind('-')] + "\n")
    

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 1970-01-01
      • 2011-01-13
      • 2014-06-05
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      相关资源
      最近更新 更多