2011-07-29 10 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) 

は名前 はそのうちoがデータ

が欠落していた0入力ファイルを、処理されたファイルに0行を書きました

私のMacでファイルに144行行く...

いずれかの提案はありますか?

+0

コードを4つのスペースでインデントすると、コードとして表示されます。あなたがそれをするまで、誰も読まなくても構いません。 – jergason

+0

申し訳ありませんが、私は少なくとも8時間この問題を解決できないと言います... –

+0

奇妙なことに、私はこの投稿を編集することもできません。 – Josh

答えて

2

私の頭の上から外れると、/をパスに使用するときの問題のように見えます。 Windowsは\を代わりに使用します。

os.pathには、プラットフォーム間でのパスの操作を容易にするための多数の機能が含まれています。

+0

Python(そして他のほとんどのUnixesqueソフトウェア)が\の代わりにWindowsを受け入れる/しないので、これは起こりそうもありません。 – nandhp

+0

@nandhpこの場合、\文字はglobで生成されますが、コードは/ –

3

スクリプトでエラーが発生しない場合、このコードは空リストを返す可能性が最も高いです。 glob.globとして見

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

が前方には、Windows上でスラッシュと完全に正常に動作し、問題は、それが最も可能性の高いあなたが提供する文字列がどこかに誤りがあることを意味したファイルを、見つけていない可能性が最も高いです。 "c/Cmos6_*.IG"にエラーがないことを確認してください。

この問題が原因ではない場合は、残念ながら、なぜ起こっているのかわかりません。

また、私が試したときに、glob.globによって返されたファイル名には、Windowsではバックスラッシュが含まれていたので、おそらく"\\"で分割する必要があります。

+0

ありがとう!それは\\でした! –

+0

私はあなたがそれを解決することができてうれしいです!また、あなたが望むなら、upvotingを考えてみてください、または私の答えを受け入れる、それは私をとても幸せにするでしょう。 :) – Merigrim

0

s.split("/")は間違いなくs.split(os.pathsep)である必要があります。私は、Mac OS X上でWindows上で\/で一度... :)

実際には、この、globリターンパスにかまれてしまったので、あなたは適切なパス区切り文字(os.pathsep)を使用して分割を行う必要があります。

関連する問題