Python:检查并添加到文本文件

时间:2013-11-15 10:03:34

标签: python text-files

我一直在努力,谷歌搜索几个小时。我似乎无法弄清楚出了什么问题。

此计划的目的是检查股票市场自动收报机符号的文本文件,并仅在文件中尚未包含时才添加自动收报机。

有两件事情出错了。当文本文件为空时,它根本不会添加任何代码。当文本文件中只有一个字符时,它会添加您提供的每个代码,无论该代码是否已经在列表中。

import re

def tickerWrite(tick):
    readTicker = open('Tickers.txt', 'r')
    holder = readTicker.readlines()
    readTicker.close()

    if check(tick) == False:
        writeTicker = open('Tickers.txt', 'w')
        holder.append(tick.upper() + '\n')
        writeTicker.writelines(holder)
        writeTicker.close()

def check(ticker):
    with open('Tickers.txt') as tList:
        for line in tList:
            if re.search(ticker, line):
                return True
            else:
                return False

另一个模块调用 AddReadTickers.tickerWrite(自动收报机)以添加用户输入的代码。

2 个答案:

答案 0 :(得分:2)

首先。

我建议使用

if not check(tick):

而不是

if check(tick) == False:

然后。我认为最好使用

writeTicker = open('Tickers.txt', 'a')

你根本不需要持有人。

试图重写代码

from __future__ import print_function

import re
import sys


def tickerWrite(tick):
    if not check(tick):
        with open('Tickers.txt', 'a') as writeTicker:
            print(tick.upper(), file=writeTicker)

def check(ticker):
    with open('Tickers.txt') as tList:
        for line in tList:
            return bool(re.search(ticker, line))

if __name__ == '__main__':
    tickerWrite(sys.argv[1])

它对我来说很有效。

答案 1 :(得分:0)

  1. 函数检查应该默认返回False。对于空的Tickers.txt,它返回None,这会导致行“if check(tick)== False:”始终为False。这就是它不会为空文件添加任何自动收报机的原因
  2. 我的猜测是因为自动收报机的内容。由于您使用股票代码作为模式,当股票代码包含正则表达式的一些特殊字符时,可能会导致意外结果。根据我的理解,你可以使用代码
  3. if ticker==line:
        return True
    else:
        return False