2015-01-15 39 views
0

我的程序嘗試讀取文件並處理其內容。 文件要處理包含讀取文件返回「無效標記」錯誤

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

看起來像你以某種方式嘗試評估數據文件? – MightyPork

+0

如上所述,Python正在試圖評估文字字符串「core」和「core-009」。字符串「核心」是否完全出現在您的腳本中? – MrGumble

+1

我無法複製您的代碼... –

回答

0

這個答案是有點晚了,我沒有它的任何可用內存和可用的代碼,所以我回答的基礎上MightyPorkTom Dalton和我的評論這個問題。

顯然問題是我沒有運行該程序。
而不是運行

python <name>.py param1 param2 ... 

的我跑

python param1 param2 ... 

其失敗,因爲我param1似乎已經包含問題的最上面的文本文件。

然而,我不知道我是如何得到兩個不同的錯誤信息:我可能已經給出了不同的文件,如param1或類似的東西。

因此,它不是在代碼中的錯誤,因爲其他答案(和我的問題)建議。

0

這是我的建議。你應該使用一個集合,這是一個內置的數據類型,只存儲唯一的值。這意味着不會有任何重複,只要你願意。試試這個:

  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 
    

編輯你的代碼實際上似乎工作。也許,錯誤在於你使用文件內置函數作爲變量。你能在這個細分市場之前和之後提供代碼嗎?看來你的文件正在被評估。

+0

你知道我的代碼做的是完全一樣的東西,只有更短? 並且對你的編輯:我使用這個文件的唯一地方是在'with ... as ...:'下。 最後,答案已經找到,請參閱問題下面的評論。 –

+0

是的,我添加了一個提及這個錯誤的可能來源。 –

1

一個更好的辦法來做到這一點是

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

這裏的程序需要從系統中輸入並打印出來。您可以使用此作爲

​​
+0

究竟爲什麼這更好? –

+0

@TheJustist較少的代碼行;) –

+0

@TheJustist您可以將我的代碼編寫爲單個命令行實用程序 –