读取文件会返回“无效令牌”错误

时间:2015-01-15 14:04:15

标签: python

我的程序尝试读取文件并处理其内容。 要处理的文件包含

core-001
core-001
core-002
core-003
core-003
...
core-nnn

要处理它,我想读出每一行,将它们填入列表中,删除重复项,然后再将它们放在其他文件中。 我使用的前三件事的代码如下:

content = []
with open(file,'r') as openFile:
        content = [line.strip('\n') for line in openFile]
content = list(set(content))

Why I use list and set
据我所知,这不应该有任何问题,但会返回两个错误:

Traceback (most recent call last):
  File "/path/to/file", line 1, in <module>
    core-004
NameError: name 'core' is not defined

File "/path/to/file", line 21
    core-009
           ^
SyntaxError: invalid token

导致这些错误的原因,更重要的是,如何避免这些错误?

编辑在评论中也可读,但在此处重复: 这不是代码中的错误,只是我编码不够好。这些错误是由python尝试执行输入文件而给出的,因为我似乎忘了给它执行可执行文件而只有参数。这样做后效果很好。 我感谢你的时间和善意的评论。

3 个答案:

答案 0 :(得分:1)

更好的方法是

import sys
lines = sys.stdin.readlines()
print ''.join(sorted(set(lines)))

此处程序从系统获取输入并将其打印出来。您可以将其用作

python run.py < input.txt > output.txt

答案 1 :(得分:1)

这个答案有点晚了,我没有任何可用的内存或可用的代码,所以我根据MightyPorkTom Dalton和我自己的评论回答了这个问题。

显然问题是我没有运行程序 而不是运行

python <name>.py param1 param2 ...

我跑了

python param1 param2 ...

失败,因为我的param1似乎是一个包含问题中最顶层文本的文件。

但是,我不知道我是如何得到两个不同的错误消息:我可能已经提供了不同的文件param1或类似的东西。

因此,这不是代码中的错误,因为其他答案(和我的问题)建议。

答案 2 :(得分:0)

这是我的建议。您应该使用set,这是一种仅存储唯一值的内置数据类型。这意味着不会像您希望的那样重复任何重复。试试这个:

  1. 阅读文件的行。
  2. 添加行以进行设置。
  3. 将设置转换为列表。

    content = open('file.txt').readlines() # read file's lines
    content = [item.strip('\n') for item in content] # remove newlines
    
    content_set = set(content) # to set to remove repeats
    content_list = list(content_set) # back to list
    
  4. 编辑您的代码实际上似乎有效。也许,错误在于您将文件内置函数用作变量。你能提供这段之前和之后的代码吗?您的文件似乎正在评估中。