2013-09-01 75 views
0

我有一個python腳本是這樣的:如何直接在python中打開文本文件?

#I'm treating with text files 
input = str(raw_input('Name1: ')) 
output = str(raw_input('Name2: ')) 

inputFile = open(input, 'r') 
outputFile = open(output, 'w') 

def doSomething(): 

    #read some lines of the input 
    #write some lines to the output file 

inputFile.close() 
outputFile.close() 

所以,你必須把輸入文件的名稱和輸出的名稱調用腳本在後殼:

python script.py 

但我不知道是否有可能直接調用輸入文件,並設置由我調用腳本時的輸出文件的名稱,所以調用的語法將是這樣的:

python script.py inputFile.txt outputFile.txt 

然後,它使得它們相同,但不使用raw_input方法。 我該如何做到這一點?

+4

查看命令行參數。它們存儲在'sys.argv'中。我想這就是你要找的。 –

+1

順便說一下,'raw_input()'已經返回一個字符串,不需要在其結果中應用'str()'。 –

+2

及時學習['with'語句](http://docs.python.org/2/reference/compound_stmts.html#the-with-statement)。 –

回答

4

您可以使用sys.argv

傳遞給一個Python腳本命令行參數的清單。 argv [0] 是腳本名稱(操作系統依賴於它是否是 完整路徑名)。如果使用-c 命令行選項向解釋器執行該命令,argv [0]將被設置爲字符串 '-c'。如果沒有腳本名稱傳遞給Python解釋器,argv [0] 是空字符串。

import sys 

input_filename = sys.argv[1] 
output_filename = sys.argv[2] 

with open(input_filename, 'r') as input_file, open(output_filename, 'w') as output_file: 
    # do smth 

另外,代替人工手動操作close()上的文件,使用with上下文管理。

此外,對於命令行參數更復雜的操作,可以考慮使用argparse模塊:

的argparse模塊可以很容易地編寫用戶友好的命令行接口 。該程序定義了它需要的參數,並且argparse將找出如何解析sys.argv中的那些參數。參數 argparse模塊也會自動生成幫助和使用消息 ,並在用戶給出程序無效參數時發出錯誤。

+4

最好不要叫它'input' - 因爲你會覆蓋內建的'input' - 對於Python 2。7開始,你可以用'inline(input_fname)作爲fin,打開('output_fname','w')作爲fout' ... –

+1

@JonClements哦,當然,shadowing內置。謝謝,沒有注意到。 – alecxe

+0

只要你在這裏,你也可以把一張支票 - 否則會有另一張票,我得到這個'IndexError',我不知道爲什麼:) –

1

您可以將輸入和輸出文件名作爲參數傳遞給腳本。這是一個如何去做的片段。

import sys 

#check that the input and output files have been specified 
if len(sys.argv) < 3 : 
    print 'Usage : myscript.py <input_file_name> <output_file_name>' 
    sys.exit(0) 

input_file = open(sys.argv[1]) 
output_file = open(sys.argv[2]) 
input_file.read() 
output_file.write() 
input_file.close() 
output_file.close() 

現在調用腳本myscript.py inputfile.txt outputfile.txt

注意,你可能要檢查的輸入和輸出文件名稱已被指定打開的文件之前,並拋出一個錯誤,如果沒有。因此,您可以

+0

哦!否:['with'語句](http://docs.python.org/2/reference/compound_stmts.html#the-with-statement)。 –

+0

你也可以使用with statment。我只是向你展示了另一種方式 –

+0

*應該有一個 - 最好只有一個 - 明顯的方法來做到這一點。* - Python的禪宗 –