从文本文件中读取特定单词,然后保存下一个单词

时间:2017-04-15 22:57:22

标签: python file

我需要从一个看起来像这样的文本文件中读取:

football 1
basketball 2
hockey 0
tennis 2
...

其中有x行,每行有一个运动和一个数字。我得到了一项运动,我必须在一个变量中保存这项运动的数量,但我找不到一个好方法。

2 个答案:

答案 0 :(得分:2)

这里有几个选择。最简单的方法是使用标准python迭代文件对象。

# This will only get the first occurrence
with open("sportfile.txt", "r") as f:
    for line in f:
        curr_sport, num = line.split()
        if curr_sport==sport:
            break

如果您有多次出现,您可以将这些数字存储在一个列表中 - 或者如果您不需要特异性,可以将它们相加...取决于手头的问题。

sport = 'football' # for example
football_nums = []
with open("sportfile.txt", "r") as f:
    for line in f:
        curr_sport, num = line.split()
        if curr_sport==sport:
            football_nums.append(num)

有关python中文件句柄的信息,请参阅文档“https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files”。

如果您需要将文件翻译成python结构,您可以查询以查找任何运动和相应的数字,您可以使用熊猫(可能是矫枉过正,但我​​喜欢熊猫: - ))

df = pd.read_csv('sportfile.txt', sep = ' ')
df.columns = ['sport', 'num']
df[df.sport=='football'] # returns all rows where the sport is football.

pandas .read_csv()非常详细而且功能强大:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

答案 1 :(得分:0)

随意试试这个。刚刚测试了shell中的快速样本。

import sys


if __name__ == '__main__':
    key = "football"
    for line in sys.stdin:
        sport, number = line.split()
        if sport == key:
            print "{}, {}".format(sport, number)
            break
    else:
        print "{} not found".format(key)