2014-06-24 153 views
1

我有一個名爲「odbList.txt」的txt文件,其中包含幾個odb文件的名稱。Abaqus Python腳本通過變量名打開幾個odb文件

plate_2mm.odb 
plate_4mm.odb 
plate_6mm.odb 

現在我寫了一個Python腳本,我想在這個循環中打開每個文件。

# list of ODB-Files 
    odbList = [ ] 
    f = file('W:/someDirectory/odbList.txt' , 'r') 
    count = 0 
    for line in f.readlines() : 
     odbList.append (line) 
     count = count + 1 

    def getSIF(case, i): 
     odb = openOdb(path = 'W:/someDirectory/' + case) 

    # start analyses for each case 
    for i in xrange(0,count): 
     getSIF(odbList[i], i) 

我收到以下錯誤信息:

OdbError: Cannot open file W:/someDirectory/plate_2mm.odb 
. *** ERROR: No such file: W:/someDirectory/plate_2mm.odb 

怪異的事情但是是它的時候我硬編碼的完整路徑工作完全正常。

另一個奇怪的事情。如果我用這個行:

odb = openOdb(path = case) 

我獲得以下錯誤信息:

OdbError: Cannot open file C:/Temp/plate_2mm.odb 
. *** ERROR: No such file: C:/Temp/plate_2mm.odb 

如果我我的所有文件轉移到C:/溫度一切正常。但是,如果我使用第一個版本/不同的文件夾,爲什麼它不起作用呢?特別是因爲它在硬編碼時工作。

回答

0

大部分的時間,當我打開一個文件我用如下:

f=open(file_name,'r') s=f.read().splitlines() f.close() while '' in s: s.remove('')

現在,您將在沒有輸入的情況下擁有一個列表。

另外,您可以使用類似

import os odbList=[] for fileN in os.listdir("."): if '.odb' in fileN: odbList.append(fileN)

這將找到名字包含.odb的所有文件腳本目錄/工作目錄

+0

第一段代碼解決了我的問題。在我的原代碼中也使用line.rstrip()(就像Aaron建議的那樣)。 – lilpatschu

0

您是否嘗試過進入你的字符串作爲原始字符串這樣odb = openOdb(path = r'W:/someDirectory/' + case)或usining的os.sep性格是這樣的:odb = openOdb(path = 'W:someDirectory' + os.sep + case)

+0

感謝您的答覆。不幸的是,這並沒有奏效。但我注意到別的東西。如果odbList.txt只包含一行(只有一個文件名),它就起作用。也許換行不正確? – lilpatschu

+0

您可以嘗試向case對象添加lstrip和rstrip以刪除所有空白字符,並查看是否修復它。 – Aaron

+0

插入「line = line.rstrip()」作爲for-Loop工作的第一行。謝謝! – lilpatschu