【问题标题】:Python-Create array from txtPython-从txt创建数组
【发布时间】:2017-02-15 07:29:24
【问题描述】:

我正在尝试从 txt 文件在 Python 2.7 中创建一组股票代码。 txt 文件每行只有 1 个代码,例如:

SRCE
ABTX
AMBC
ATAX

我使用的代码如下:

FinTick= []

    def parseRus():
        try:
        readFile=open(r'filename.txt','r').read()
        splitFile=readFile.split('\n')
        FinTick.append(splitFile)
        print FinTick



        except Exception, e:
        print str(e)

当我调用 'parseRus()' 时,我得到如下输出:

'\xff\xfeS\x00R\x00C\x00E\x00\r\x00', '\x00A\x00B\x00T\x00X\x00\r\x00', '\x00A\x00M\x00B\x00C\x00\r\x00', '\x00A\x00T\x00A\x00X\x00\r\x00'

存在正确的字母,但未在平面文本中打印。我使用了其他几种逻辑方法来填充数组,但仍然得到相同的输出格式。

【问题讨论】:

  • 看看numpy.loadtxt。这应该比简单的打开和阅读效果更好。
  • 如果从r'filename.txt'open 中删除r 会发生什么?
  • @Chris_Rands 我收到无效模式或文件名错误。

标签: python arrays python-2.7


【解决方案1】:
>>> tickers = []
>>> with open("filename.txt", "r") as f:
        for ticker in f.readlines():
            tickers.append(ticker.strip())


>>> tickers
['SRCE', 'ABTX', 'AMBC', 'ATAX']

尝试改用readlines() 和strip()。

编辑:关于f.readlines() 和strip() 的一些清晰度:

>>> with open("filename.txt", "r") as f:
        print(f.readlines())

['SRCE\n', 'ABTX\n', 'AMBC\n', 'ATAX']

因此,当我们遍历 f.readlines() 返回的 list 对象时,我们需要去除换行符 \n 字符。对str 类型使用strip() 方法来执行此操作。

编辑 2:@Eli 是对的。我们也可以使用for ticker in f 而不是for ticker in f.readlines()。

>>> tickers = []
>>> with open("filename.txt", "r") as f:
        for ticker in f:
            tickers.append(ticker.strip())

>>> tickers
['SRCE', 'ABTX', 'AMBC', 'ATAX']

【讨论】:

  • 无需使用readlines。只需执行for ticker in f:。无需将整个文件读入 RAM。
  • 我不清楚你是否解决了他们的问题,你能复制 OP 的当前输出吗?
  • OP 的代码实际上对我有用。我从他们的代码中得到的结果与我从我的代码中得到的结果相同。我只是想知道他们的文本文件中是否有多余的字符。
  • @Eli Korvigo 我仍然得到相同格式的输出。它可能与“filename.txt”输入之前的“r”有关吗?如果我不将“r”放在首位,我不确定为什么会出现“无效模式或文件名”错误。
  • 对为什么你得到正确的输出而我的输出格式如此奇怪有什么想法吗?
【解决方案2】:

我终于找到了解决办法。

我必须将文本文件从 1 列修改为 1 行,然后保存为 .csv 并将代码修改为:

FinTick= []

def parseRus():
    try:
        readFile=open(r'filename.csv','r').read()
        splitFile=readFile.split(',')
        for eachLine in splitFile:
            splitLine=eachLine.split(',')
            ticker=splitLine[0]
            FinTick.append(ticker.strip())



    except Exception, e:
    print str(e)

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2021-05-10
    相关资源
    最近更新 更多