0

我一直在研究这个,并在谷歌上搜索了几个小时。我似乎无法弄清楚出了什么问题。

该程序的目的是检查文本文件中的股票市场代码,并仅在文件中没有代码时才添加代码。

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

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(ticker)以添加用户输入的代码。

4

2 回答 2

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])

它对我来说似乎有效。

于 2013-11-15T10:07:10.757 回答
0
  1. 函数检查应该默认返回 False。它为空的 Tickers.txt 返回 None,这会导致“if check(tick) == False:”行始终为 False。这就是它不会为空文件添加任何代码的原因
  2. 我的猜测是因为股票的内容。由于您使用股票代码作为模式,当股票代码包含一些正则表达式的特殊字符时,可能会导致意外结果。据我了解,您可以只使用代码

if ticker==line:
    return True
else:
    return False
于 2013-11-15T10:29:05.397 回答