2011-07-29 32 views
2

我最近將一組幾乎相同的程序從我的mac移到了我的學校的窗戶,而路徑似乎是相同的(或它們的尾部),它們將無法正常運行。Mac到Windows Python

import glob 
import pylab 
from pylab import * 


def main(): 
    outfnam = "igdata.csv" 
    fpout = open(outfnam, "w") 
    nrows = 0 
    nprocessed = 0 
    nbadread = 0 
    filenames = [s.split("/")[1] for s in glob.glob("c/Cmos6_*.IG")] 
    dirnames = "c an0 an1 an2 an3 an4".split() 
    for suffix in filenames: 
     nrows += 1 
     row = [] 
     row.append(suffix) 
     for dirnam in dirnames: 
      fnam = dirnam+"/"+suffix 
      lines = [l.strip() for l in open(fnam).readlines()] 
      nprocessed += 1 
      if len(lines)<5: 
       nbadread += 1 
       print "warning: file %s contains only %d lines"%(fnam, len(lines)) 
       tdate = "N/A" 
       irrad = dirnam 
       Ig_zeroVds_largeVgs = 0.0 
      else: 
       data = loadtxt(fnam, skiprows=5) 
       tdate = lines[0].split(":")[1].strip() 
       irrad = lines[3].split(":")[1].strip() 
       # pull out last column (column "-1") from second-to-last row 
       Ig_zeroVds_largeVgs = data[-2,-1] 
      row.append(irrad) 
      row.append("%.3e"%(Ig_zeroVds_largeVgs)) 
     fpout.write(", ".join(row) + "\n") 
    print "wrote %d rows to %s"%(nrows, outfnam) 
    print "processed %d input files, of which %d had missing data"%(\ 
     nprocessed, nbadread)` 

這個程序對於Mac運行良好,但窗戶我不斷收到爲:

print "wrote %d rows to %s"%(nrows, outfnam) 
    print "processed %d input files, of which %d had missing data"%(\ 
     nprocessed, nbadread) 

寫0行到文件名 加工0輸入文件,其中呵,什麼時候丟失的數據

在我的Mac我去144行檔...

沒有任何建議嗎?

+0

將代碼縮進四個空格,使其顯示爲代碼。在你這樣做之前,沒有人會試圖通讀它。 – jergason

+0

對不起,它說我至少8小時無法解決這個問題...... –

+0

奇怪的是,我也無法編輯這篇文章。 – Josh

回答

2

關閉我的頭頂,它看起來像在路徑中使用/的問題。 Windows使用\來代替。

os.path包含許多函數來簡化跨平臺路徑的工作。

+0

這不太可能,因爲Python(和大多數其他Unixesque軟件)在Windows上接受/而不是\。 – nandhp

+0

@nandhp在這種情況下,\字符是由glob生成的,但代碼查找/ –

3

如果腳本不會引發任何錯誤,這段代碼很可能會返回一個空列表。

glob.glob("c/Cmos6_*.IG") 

看到,因爲glob.glob工作完全正常正斜槓在Windows上,這個問題是最有可能的是它沒有找到文件,這很可能意味着你提供的字符串中的某個地方有一個錯誤。確保"c/Cmos6_*.IG"中沒有任何錯誤。

如果問題不是由此造成的,那麼不幸的是,我不知道它爲什麼會發生。

另外,當我嘗試它時,由glob.glob返回的文件名在它們的Windows中有反斜槓,所以你應該用"\\"來代替。

+0

謝謝!這是\\! –

+0

我很高興你能解決它!另外,如果你願意,請考慮提高或接受我的答案,這會讓我很開心。 :) – Merigrim

0

您的s.split("/")肯定應該是s.split(os.pathsep)。我被這種蛇咬,十年一次... :)

事實上,\在Windows和/glob返回路徑在Mac OS X,所以你需要用合適的路徑分隔符(os.pathsep)做你的分裂。