我的程序尝试读取文件并处理其内容。 要处理的文件包含
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
尝试执行输入文件而给出的,因为我似乎忘了给它执行可执行文件而只有参数。这样做后效果很好。
我感谢你的时间和善意的评论。
答案 0 :(得分:1)
更好的方法是
import sys
lines = sys.stdin.readlines()
print ''.join(sorted(set(lines)))
此处程序从系统获取输入并将其打印出来。您可以将其用作
python run.py < input.txt > output.txt
答案 1 :(得分:1)
这个答案有点晚了,我没有任何可用的内存或可用的代码,所以我根据MightyPork,Tom Dalton和我自己的评论回答了这个问题。
显然问题是我没有运行程序 而不是运行
python <name>.py param1 param2 ...
我跑了
python param1 param2 ...
失败,因为我的param1
似乎是一个包含问题中最顶层文本的文件。
但是,我不知道我是如何得到两个不同的错误消息:我可能已经提供了不同的文件param1
或类似的东西。
因此,这不是代码中的错误,因为其他答案(和我的问题)建议。
答案 2 :(得分:0)
这是我的建议。您应该使用set,这是一种仅存储唯一值的内置数据类型。这意味着不会像您希望的那样重复任何重复。试试这个:
将设置转换为列表。
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
编辑您的代码实际上似乎有效。也许,错误在于您将文件内置函数用作变量。你能提供这段之前和之后的代码吗?您的文件似乎正在评估中。