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

Python 使用split从文件中的行读取特定字符串,python,string,file,split,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

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

如何执行此操作?

看起来您的文件是由选项卡(或\t)分隔的

你试过按标签分开吗

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

不管怎么说,这个文件似乎是由excel或类似软件生成的,您是否尝试过将其导出为CSV(逗号分隔值)格式,而不是纯txt格式

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


希望它有助于您的文本文件至少用两个空格分隔,因此指定在两个空格上拆分,并使用strip()剥离端点上的剩余空格是有效的

收益率:

San Diego
San Diego
Omaha

由于
sample.txt
中的项目大部分由2个空格分隔,因此需要使用
split(“”)
。如果使用
split()
,默认情况下会将每个空格分割,例如将
的“男装”
转换为
[“男装”、“服装”]
,这不是您想要的

您可以做的第一件事是使用以下工具查看您的项目:

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

您需要通过添加delimeter来预处理输入文件,delimeter将在
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('test.txt'):
...     print(line[20:32])
...
San Diego
San Diego
Omaha

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

您需要指定拆分字符串的子字符串。类似于:
split(“\t”)
。它解释了可能的重复,我们不知道它保证在列之间至少留下两个空格。如果第三列包含11个字母长的城市,会发生什么?我猜在下一列之前你会得到一个空格。那么你怎么知道逗号放在哪里呢?你只是把问题的难点推给了其他人。在某些情况下,列之间的间距可能只有一个空格。
for line in open("sample.txt"):
  city=line.split(",")[2]
  print(city)
>>> for line in open('test.txt'):
...     print(line[20:32])
...
San Diego
San Diego
Omaha