2013-08-07 3 views
0

나는 보통 내 실화로 인해 내 실제 세대에서 제 세대를 분리하려고했습니다. 그러나 어떤 이유로 그것은 파일이 비어 있다고 주장합니다./그로부터 얻은 변수는 비어 있습니다. 그리고 때로는 나중에 보았을 때, 실제 프로그램 파일이 모든 정보로 텍스트 파일을 비우고 때로는 그렇지 않은 경우가 있습니다.파이썬의 파일이 이유없이 비어 있습니다.

world_file = open("C:\Users\Ben\Documents\Python Files\PlatformerGame Files\World.txt", "r") 
world_file_contents = world_file.read() 
world_file.close() 
world_file_contents = world_file_contents.split("\n") 
WORLD = [] 
for data in world_file_contents: 
    usable_data = data.split(":") 
    WORLD.append(Tile(usable_data[0],usable_data[1])) 

그리고 타일 클래스 :

class Tile(): 
    def __init__(self,location,surface): 
     self.location = location 
     self.surface = surface 
다음

Dropbox Main code

Dropbox World gen

주요 코드에서 처리 단지 파일의 작은 추출물이다 : 여기에 코드입니다

그리고 오류 :

Traceback (most recent call last): 
    File "C:\Users\Ben\Documents\Python Files\PlatformerGame", line 89, in <module> 
    Game.__main__() 
    File "C:\Users\Ben\Documents\Python Files\PlatformerGame", line 42, in __main__ 
    WORLD.append(Tile(usable_data[0],usable_data[1])) 
IndexError: list index out of range 

죄송합니다. 또한 파이 게임을 사용하고 있습니다.

+1

파일의 모든 줄에 콜론 ":"이 있습니까? 아니면 마지막에 빈 줄이 나왔을 수도 있습니다. –

+0

네, 그 부분은 답변입니다, 감사합니다! 하지만 여전히 gen에서 os.startfile을 사용하면 파일을 비울뿐, 수동으로 gen을 실행하고 os 코드를 제거하는 것이 왜 효과가 있는지 설명하지 못합니다. 당신의 대답을 제출하십시오, 나는 그것을 옳은 대답으로 받아 들일 것입니다. –

+0

아마도 파일이 비어있는 것 같습니다. – kindall

답변

2

아마도 입력 파일에 빈 줄이 있습니다. 당신은 이것을 건너 뛰고 싶을 것이다.

당신은 또한 당신의 타일 독서 코드를 단순화 할 수 있습니다

with open("C:\Users\Ben\Documents\Python Files\PlatformerGame Files\World.txt", "r") as world_file: 
    WORLD = [Tile(*line.strip().split(":", 1)) for line in world_file if ':' in line] 

이 프로세스 만 라인을 그들에 : 문자가 있는지, 한 번만 분할, 하나 개의 루프에서 WORLD 목록을 만듭니다.

os.startfile()을 사용하는 경우 백그라운드에서 다른 스크립트를 시작합니다. 그런 다음 스크립트는 새 데이터를 생성하기 전에 파일을 작성하여 파일에 쓰고 명시 적으로 파일을 비 웁니다. 동시에에서 해당 파일을 읽으려고합니다. 다른 프로세스가 아직 을 완료하지 않았으므로 데이터를 생성하고 쓰는 동안 빈 파일을 읽게 될 가능성이 있습니다. 그리고 파일 쓰기가 버퍼됨에 따라 모두의 데이터가 표시 될 때까지 버퍼링됩니다. 프로세스가 파일을 닫고 종료합니다.

사용하지 마십시오 os.startfile()여기에을 입력하십시오. 대신 다른 파일을 가져 오십시오. 가져 오는 동안 코드가 실행되고 파일을 닫을 수 있습니다.

관련 문제