2015-05-06 121 views
1

我有一個文本文件,其中包含我希望打開的文件的文件路徑。訪問保存在.txt文件中的文件路徑。 (Python)

文本文件看起來像這樣:

28.2 -1.0 46 14 10 .\temp_109.17621\voltage_28.200\power_-1.txt 
28.2 -2.0 46 16 10 .\temp_109.17621\voltage_28.200\power_-2.txt 

...

我想在這個文件路徑打開文件。

第一步是從文本文件中加載每個文件路徑。

我已經試過這一點使用:

path = np.loadtxt('NonLorentzianData.txt',usecols=[5],dtype='S16') 

產生一個path[1],看起來像:

.\\temp_109.17621 ...

而不是整個文件路徑。

我使用了錯誤的dtype或者這不可能與loadtxt

+0

loadtxt負載字面上的文件中包含的啓發。它不明白該列是一個文件路徑。 – nneonneo

+0

是的。就這些。 – 8765674

+0

@ 8765674全部都是正確的,你使用S16作爲一個類型並返回了長度爲16的字符串(\\是一個字符)。根據[this](http://stackoverflow.com/questions/20121949/python-numpy-loadtxt-with-varied-string-entries-but-know-line-format)嘗試使用'np.genfromtxt'和' dtype = None'或者正確調整字符串的長度 – Reishin

回答

1

您可以使用S16作爲一種類型,並得到.\\temp_109.17621作爲結果(\\轉義\),並返回字符串長度= 16。

嘗試使用np.genfromtxtdtype=None或適當調整dtype='S45'(你的情況)

通過post

1

如果更改數據類型np.str_它會工作:

path = np.loadtxt('NonLorentzianData.txt',usecols=[5],dtype=np.str_) 

print(path[1]) 
.\temp_109.17621\voltage_28.200\power_-2.txt 

或者使用dtype=("S44")也將工作,這是你的最長的兩條路徑的長度。 您正在指定一個16個字符的字符串因此您只能得到的前16個字符

In [17]: s = ".\\temp_109.17621" 

In [18]: len(s) 
Out[18]: 16 

# 43 character string 
In [26]: path = np.loadtxt('words.txt',usecols=[5],dtype=("S43"))  
In [27]: path[1] 
Out[27]: '.\\temp_109.17621\\voltage_28.200\\power_-2.tx'  
In [28]: len(path[1]) 
Out[28]: 43  
# 38 character string 
In [29]: path = np.loadtxt('words.txt',usecols=[5],dtype=("S38"))  
In [30]: path[1] 
Out[30]: '.\\temp_109.17621\\voltage_28.200\\power_'  
In [31]: len(path[1]) 
Out[31]: 38 
In [32]: path = np.loadtxt('words.txt',usecols=[5],dtype=np.str_) 
In [33]: path[1] 
Out[33]: '.\\temp_109.17621\\voltage_28.200\\power_-2.txt' 

如果你看一下docs你會看到什麼每一個D型功能以及如何使用它們。

如果你只是希望所有的文件路徑,你也可以使用csv.reader

import csv 
with open("NonLorentzianData.txt") as f: 
    reader = csv.reader(f,delimiter=" ") 
    for row in reader: 
     with open(row[-1]) as f: 
      ..... 
+0

不是從路徑文件加載的情況,根據'。\\ temp_109.17621 ...''斜線很好地逃脫了 – Reishin