2011-07-29 5 views
2

최근 Mac에서 학교의 Windows로 거의 동일한 프로그램 집합을 옮겼습니다. 경로가 동일하거나 끝 부분이 같지만 제대로 실행되지 않습니다.Mac to 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)` 

이 프로그램은 맥을 위해 잘 작동하지만, 창문 나는 위해 점점 계속 :

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)이어야합니다. 적절한 경로 분리 (os.pathsep)로 분할 할 필요가 그래서 나는, 맥 OS X에, 사실 :)

... 한 번이하여 Windows에 \/glob 반환 경로를 물린있어.