python:读取和搜索.txt文件

时间:2012-07-23 13:27:13

标签: python file

所以我想我差不多了。我正在搜索计算牌数的扑克手牌历史文件。

在每手牌开始时我们都有这个声明“游戏#xxxxxx开始。”

我正在看“开始”这个词。出现在每只手的开头,所以我想计算所有出现的情况。

Hands_Played总是返回0,所以我认为我要找的单词没有被正确选取

任何想法我做错了什么?

Hands_Played = 0

def CountHands(Hands_Played):
    Hand_History_File = open("C:\xxxxx\blah_blah.txt", "r")
    data = Hand_History_File.read()
    print data
    print "Counting Hands..."
    for line in data:
        print "Loop" #Shows me that each line is being read
        if "starts." in Hand_History_File:
            Hands_Played = Hands_Played + 1
    return Hands_Played            

CountHands(Hands_Played)
print "Number of Hands Played: %s" % Hands_Played

4 个答案:

答案 0 :(得分:2)

<强>更新

您还需要先将函数的返回值赋给变量,然后才能使用它:

CountHands(Hands_Played)
print "Number of Hands Played: %s" % Hands_Played

应该是

Hands_Played = CountHands(Hands_Played)
print "Number of Hands Played: %s" % Hands_Played

否则你永远不会收到计数,你最终会显示你在程序开始时设置的初始值(0)。

就此而言,除非您在函数调用之间保持计数,否则您实际上不需要此函数的参数。只需在函数开头的本地内部创建Hand_Played变量,然后像现在一样返回它。您可以从功能标题和通话中删除参数,您应该全部设置。

--- 之前,仍然适用。

而不是:

if "starts." in Hand_History_File:
你可能想要

if "starts." in line:

另外,完成后请不要忘记显式关闭文件。即,在从函数返回之前拨打电话Hand_History_File.close()

更好的是,考虑使用with构造来管理文件。当您完成它时,它将在块结束时自动关闭您的文件,或者您遇到异常。您还可以逐行处理文件并简化代码。即,一个简化的版本,接近您的功能/代码的原始设计:

def CountHands():
    Hands_Played = 0
    with open(r"C:\xxxxx\blah_blah.txt") as Hand_History_File:
       for line in Hand_History_File:  # process file line-by-line
           if "starts." in line:
              Hands_Played +=  1
    return Hands_Played


Hands_Played = CountHands(Hands_Played)
print "Number of Hands Played: %s" % Hands_Played

注意:

我使用“raw”字符串(路径前面带有“r”)来阻止Python解释字符串的某些字符组合。我在open调用中不使用“r”,因为它是打开文件时的默认值。我使用+=运算符来缩短增量。当您使用with开始阻止该块时,您的文件将被关闭。

答案 1 :(得分:1)

为什么不让python自己进行计数?

def CountHands(Hands_Played):
    with open("C:\xxxxx\blah_blah.txt", "r") as Hand_History_File:
        Hands_Played += Hand_History_File.read().count("starts.")
    return Hands_Played            

您的代码中出现的错误是:

  1. 你应该使用if "starts." in Hand_History_File,在这里检查是否存在“开始”。在您的文件句柄中,而不是在文件的内容

  2. 使用相同的变量名作为全局和参数名称。因此,在函数中修改的参数不是全局参数,只是它的副本。要更正此问题,请尝试打印CountHands()调用返回

  3. 的内容

答案 2 :(得分:1)

问题是你是not using scope correctly.问题是python正在解释函数接受的Hands_Played和函数外的Hands_Played作为不同的变量。请看下面的代码:

>>>variable = 10
>>>def addOne(variable):
    variable += 1
    return variable

>>>variable
10
>>>addOne(variable)
11
>>>variable
10

您可以使用语句CountHands(Hands_Played)替换Hands_Played = CountHands(Hands_Played)来解决此问题。

答案 3 :(得分:0)

这是迭代文件的方式:

with open('workfile') as f:
    for line in f:
        print line,
        # do something