2013-09-01 75 views
0

我正在轉換我在Windows環境下編寫的一些Python腳本以在Unix(Red Hat 5.4)中運行,並且遇到了轉換問題處理文件路徑的行。在Windows中,我通常是在所有.txt文件使用類似讀取目錄中:Python - glob.glob在Unix操作系統中的指定文件路徑中找不到* .txt

pathtotxt = "C:\\Text Data\\EJC\\Philosophical Transactions 1665-1678\\*\\*.txt" 
for file in glob.glob(pathtotxt): 

似乎可以使用在Unix上glob.glob()方法爲好,所以我想實現這個方法找到使用下面的代碼的目錄名爲「源」中的所有文本文件:

#!/usr/bin/env python 
import commands 
import sys 
import glob 
import os 

testout = open('testoutput.txt', 'w') 
numbers = [1,2,3] 
for number in numbers: 
    testout.write(str(number + 1) + "\r\n") 
testout.close 

sourceout = open('sourceoutput.txt', 'w') 
pathtosource = "/afs/crc.nd.edu/user/d/dduhaime/data/hill/source/*.txt" 
for file in glob.glob(pathtosource): 
    with open(file, 'r') as openfile: 
     readfile = openfile.read() 
     souceout.write (str(readfile)) 
sourceout.close 

當我運行該代碼時,testout.txt文件出來的預期,但sourceout.txt文件是空的。我想如果我更改線路

pathtosource = "/afs/crc.nd.edu/user/d/dduhaime/data/hill/source/*.txt" 

pathtosource = "/source/*.txt" 

,然後運行/山目錄代碼中的問題可能得到解決,但是這並沒有解決我的問題。其他人知道我可以如何讀取源目錄中的文本文件?我會很感激別人可以提供的任何見解。

編輯:如果它是相關的,上面引用的目錄/ afs /樹位於遠程服務器上,我通過膩子ssh進入。我還使用了一個test.job文件來qsub上面的Python腳本。 (這是所有準備自己的SGE集羣系統上提交作業。)的test.job腳本的樣子:

#!/bin/csh 
#$ -M [email protected] 
#$ -m abe 
#$ -r y 
#$ -o tmp.out 
#$ -e tmp.err 
module load python/2.7.3 
echo "Start - `date`" 
python tmp.py 
echo "Finish - `date`" 

回答

2

Got it!我拼錯了輸出命令。我寫

souceout.write (str(readfile)) 

,而不是

sourceout.write (str(readfile)) 

什麼是笨蛋。我還添加了換行符:

sourceout.write (str(readfile) + "\r\n") 

它工作正常。我認爲這是一個新的IDE的時間!

+0

我解決了這個問題,但我認爲這是我的錯誤:)。很高興聽到它的作品。 – TobiMarg

1

你還沒有真正關閉該文件。函數testout.close()未被調用,因爲您已經忘記了括號。這同樣適用於sourceout.close()

testout.close 
... 
sourceout.close 

必須是:

testout.close() 
... 
sourceout.close() 

如果程序完成的所有文件都將自動關閉,所以如果你重新打開文件時,它是唯一重要的。
更好的(pythonic版本)將使用with聲明。取而代之的是:

testout = open('testoutput.txt', 'w') 
numbers = [1,2,3] 
for number in numbers: 
    testout.write(str(number + 1) + "\r\n") 
testout.close() 

你會這樣寫:

with open('testoutput.txt', 'w') as testout: 
    numbers = [1,2,3] 
    for number in numbers: 
     testout.write(str(number + 1) + "\r\n") 

在這種情況下,文件甚至會發生錯誤時自動關閉。

+0

我在'close()'行後面添加了圓括號,但sourceoutput.txt文件仍然空白... – duhaime

+0

嘗試使用'「./」'作爲路徑並在文件夾中啓動程序文件位於。 – TobiMarg

+0

我試着將glob.glob行更改爲'for glob.glob('./*。txt')中的文件:'但我仍然沒有得到任何輸出。我在上面的問題中添加了更多信息(關於用於提交.py腳本的.job文件的信息) – duhaime

相關問題