2013-08-01 47 views
-3

我想通過名稱存儲在變量中的文件進行解析。如何解析通過文件存儲在變量中的文件

log_file = archive_log 
for line in print log_file: 
    print line 

這裏archive_log文件包含已存檔文件的列表。當我運行此代碼for循環是在archive_log上運行而不是在archive_log的內容上運行。所以我得到輸出像

a 
r 
c 
h 
i 
v 
e 
_ 
l 
o 
g 

如何確保循環運行文件的內容?在這裏我需要指定一個變量的文件名,因爲將來我必須根據日期計算文件名。

我正在運行python 2.4.3。獲得以下錯誤:

文件 「daily_archive.py」, 開放(LOG_FILE)線31爲f: ^語法錯誤:無效的語法

+3

這不是你的代碼。請粘貼導致所述問題的代碼。 – Tadeck

+0

確實,你發佈的代碼不會運行。 – kindall

回答

2

什麼你所描述的可能是下面的結果:

log_file = 'archive_log' 
for line in log_file: 
    print line 

(打印在log_file字符串的每一個字符)

貌似你想要這個,但是:

log_file = 'archive_log' 
with open(log_file) as f: 
    for line in f: 
     print line 

請記住,路徑是相對的,取決於您在哪裏(從哪裏)運行代碼。使用絕對路徑是更好的主意。你可以使用例如。 os.path.join()以基於文件名稱(log_file,其示例中的值爲'archive_log')和腳本文件的路徑(__file__)獲取絕對路徑。

編輯:以下是爲Python 2.4的溶液(Python 2.5的has support for with statement):

log_file = 'archive_log' 
try: 
    f = open(log_file) 
    for line in f: 
     print line 
finally: 
    f.close() 
+0

謝謝Tadeck。當我像上面提到的那樣運行代碼時,我得到語法錯誤。 文件 「daily_archive.py」,用開(LOG_FILE)線31 爲f: ^ 語法錯誤:無效的語法 – user2501825

+0

@ user2501825:什麼是你的Python的版本?另外,你可以在你的問題更新中顯示語法錯誤嗎?在Python中,空格很重要,但SO中的註釋並不關心空格,也沒有縮進。 – Tadeck

+0

@Tadeck:有些東西告訴我你的代碼比下面的代碼好,但我不知道爲什麼。另一種說法是:爲什麼'open('filename')作爲f'好於'f = open('filename','r')... f.close()'? – djas

0

的問題沒有得到很好的構成,但我想這是什麼OP平均:

filename = 'archive_log' 
file = open(filename, 'r') 

for line in file.readlines() 
    print line 

file.close() 
+0

謝謝djas。這一個工程。 – user2501825

+0

另一個答案也應該工作。無論如何,請接受其中一個。 – djas