使用split从文件中的一行读取特定字符串

时间:2018-01-20 16:20:34

标签: python string file split

给定文本文件

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

我该怎么做?

5 个答案:

答案 0 :(得分:3)

看起来你的文件被制表符(或\ t)分开。

您是否尝试过标签分割?

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

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

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

希望有所帮助

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

你的文本文件用至少两个空格分隔,所以指定拆分两个空格并用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

答案 3 :(得分:0)

由于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 :(得分:-1)

您需要通过添加将在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)