【问题标题】:Using split to read specific string from a line in a file使用 split 从文件中的一行读取特定字符串
【发布时间】:2018-06-29 17:06:23
【问题描述】:

给定文本文件

sample.txt

2012-01-01  09:00   San Diego   Men's Clothing    214.05    Amex
2012-01-01  09:00   San Diego   Women's Clothing  153.57    Visa
2012-01-01  09:00   Omaha       Music             66.08     Cash

我希望能够只阅读第三列的文本。这段代码

for line in open("sample.txt"):
      city=line.split()[2]
      print(city)

可以在一定程度上阅读第三列:

San
San
Omaha

但我想要的是:

San Diego
San Diego
Omaha

我该怎么做?

【问题讨论】:

标签: python string file split


【解决方案1】:

您的输入文件似乎具有固定宽度的字段。在这种情况下,您也许可以使用索引来实现您的目标,例如

>>> for line in open('test.txt'):
...     print(line[20:32])
...
San Diego
San Diego
Omaha

如果您需要进一步处理等,可以添加.strip() 来修剪尾随空格。

【讨论】:

    【解决方案2】:

    您需要通过添加一个分隔符来预处理您的输入文件,该分隔符将在您的split() 函数中指定。像这样:

    2012-01-01,  09:00,   San Diego,   Men's Clothing,    214.05,    Amex
    2012-01-01,  09:00,   San Diego,   Women's Clothing,  153.57,    Visa
    2012-01-01,  09:00,   Omaha,       Music,             66.08,     Cash
    

    然后

    for line in open("sample.txt"):
      city=line.split(",")[2]
      print(city)
    

    【讨论】:

    • 那你怎么知道把逗号放在哪里呢?你只是把问题的难点推给别人。
    【解决方案3】:

    由于您在sample.txt 中的项目大多由2 个空格分隔,因此您需要改用split(' ')。如果你使用split(),默认情况下会拆分每个空格,比如把"Men's Clothing"变成["Men's", "Clothing"],这不是你想要的。

    您可以做的第一件事是查看您的项目:

    with open('sample.txt') as in_file:
        for line in in_file.readlines():
            items = [x.strip() for x in line.strip().split('  ') if x]
            print(items)
    

    哪些输出:

    ['2012-01-01', '09:00', 'San Diego', "Men's Clothing", '214.05', 'Amex']
    ['2012-01-01', '09:00', 'San Diego', "Women's Clothing", '153.57', 'Visa']
    ['2012-01-01', '09:00', 'Omaha', 'Music', '66.08', 'Cash']
    

    现在如果要提取第三列:

    print(items[2])
    

    这给出了:

    San Diego
    San Diego
    Omaha
    

    【讨论】:

    • 可能存在列间距只有一个空格的情况。
    【解决方案4】:

    您的文本文件至少用两个空格分隔,因此指定拆分为两个空格并使用 strip() 去除末尾的剩余空格。

    with open('sample.txt', 'r') as file_handle:
        for line in file_handle:
            city=line.split('  ')[2].strip()
            print(city)
    

    产量:

    San Diego
    San Diego
    Omaha
    

    【讨论】:

    • 我们不知道是否保证在列之间至少留出两个空格。如果第三列包含一个 11 个字母长的城市会发生什么?我怀疑你会在下一列之前得到一个空格。
    【解决方案5】:

    您的文件看起来确实是由制表符(或 \t)分隔的。

    您是否尝试过按标签拆分它?

    试试city=line.split('\t')[2],而不是city=line.split()[2]

    无论如何,这个文件似乎是由 excel 或类似文件生成的,您是否尝试将其导出为 CSV(逗号分隔值)格式,而不是纯 txt 格式?

    然后你可以简单地用逗号分隔,比如city=line.split(',')[2]

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多