2016-06-27 59 views
-2

我想讀取一個文本文件,其中有任意數量的列與數字。如何在python和numpy中讀取文件並創建輸出文件而無需手動更改代碼中輸入文件的名稱?

我想操縱數據,然後創建一個輸出文件。

我的代碼是:

import numpy as np 

array=np.loadtxt('filename.txt') 

#multiply first column by 2 
array[:,0]=array[:,0]*2 

savetxt('filename2.txt',array) 

我想只運行在文件名中的代碼,而不必每次都手動輸入代碼的文件名。

我該如何做到這一點?

謝謝!

+0

使其採取的文件名從CMD或 – Drako

+0

您必須使用'打開文件對話框()'方法能夠指出該文件位於其他地方PARAM,而不是手工編寫它。 –

+0

請格式化您的文章中的代碼,使其更易於閱讀。 –

回答

0

使用軟件包glob,它將獲取具有某種擴展名的目錄中的所有文件,並允許您使用它們的數據。從本質上講,你只需要一個文件夾,你可以在運行程序之前刪除文本文件。

import glob 
x = [] 
for filename in glob.iglob('/Path_to_Directory/*.txt'): #Takes all text files in folder 
    x.append(filename) 

for i in x: #Loop through all folders in directory 
    with open (i, 'rU') as infile: 
0
import sys 
import numpy as np 
fname1 = sys.argv[1] 
fname2 = sys.argv[2] 
arr = np.loadtxt(fname1) 
np.savetxt(fname2, arr * 2) 

然後運行代碼:

python myscript.py inputfile.txt outputfile.txt 
+0

哇,這正是我所需要的。謝謝!所以sys是Python中的一個模塊,它允許我交互式地將我的代碼應用到文件中,而無需在代碼中正確手動更改名稱。 –

+0

來自文檔:https://docs.python.org/3.5/library/sys.html ---該模塊提供對解釋器使用或維護的一些變量以及與解釋器強烈交互的函數的訪問。 sys比你的語句更廣泛,但sys.argv是第一次執行解釋器時提供的參數列表 –

+0

p.s.你寫的問題有點含糊,所有3個答案在你問題的範圍內都是有效的。你可以考慮重寫你的問題來更具體,然後「接受」最接近答案的答案 –

0

文件名只是分配給一個變量,並使用在函數調用。

import numpy as np 
filename = 'filename.txt' # or get it from input 
data=np.loadtxt(filename) 
data[:,0]=data[:,0]*2 
np.savetxt(filename, data) # reuse the filename variable (string) 
相關問題