2016-07-23 4 views
-8

Я пытался сохранить некоторые данные в файл CSV и я получил эту ошибку:Запись в файл не работает «ошибка Отступ»

i:\Games\Pokemon GO\pokeminer-0.2>python worker.py -st 10 
Traceback (most recent call last): 
    File "worker.py", line 25, in <module> 
    import db 
    File "i:\Games\Pokemon GO\pokeminer-0.2\db.py", line 64 
    f = open('i:\Games\Pokemon GO\pokeminer-0.2\spawn_location.csv','w') 
                    ^
IndentationError: unindent does not match any outer indentation level 

И это код:

def add_sighting(session, spawn_id, pokemon): 
obj = Sighting( 
    pokemon_id=pokemon['id'], 
    spawn_id=spawn_id, 
    expire_timestamp=pokemon['disappear_time'], 
    normalized_timestamp=normalize_timestamp(pokemon['disappear_time']), 
    lat=pokemon['lat'], 
    lon=pokemon['lng'], 
) 
# Check if there isn't the same entry already 
existing = session.query(Sighting) \ 
    .filter(Sighting.pokemon_id == obj.pokemon_id) \ 
    .filter(Sighting.spawn_id == obj.spawn_id) \ 
    .filter(Sighting.expire_timestamp > obj.expire_timestamp - 10) \ 
    .filter(Sighting.expire_timestamp < obj.expire_timestamp + 10) \ 
    .filter(Sighting.lat == obj.lat) \ 
    .filter(Sighting.lon == obj.lon) \ 
    .first() 
if existing: 
    return 
session.add(obj) 

f = open('i:\Games\Pokemon GO\pokeminer-0.2\spawn_location.csv','w')  
f.write(pokemon_id+lon+lat+expire_timestamp)  
f.close()  

Этот код не мой, я просто пытаюсь заставить его написать некоторые детали в файл csv. Не могли бы вы помочь мне в этом, чтобы он работал?

+0

Код внутри функции после инструкции 'def' должен иметь отступ. Код, который вы показываете, никогда не будет работать на Python. Вернитесь к человеку, с которого вы получили код. – cdarke

ответ

1

Если остальная часть кода правильно, это нужно сделать:

def add_sighting(session, spawn_id, pokemon): 
    obj = Sighting( 
     pokemon_id=pokemon['id'], 
     spawn_id=spawn_id, 
     expire_timestamp=pokemon['disappear_time'], 
     normalized_timestamp=normalize_timestamp(pokemon['disappear_time']), 
     lat=pokemon['lat'], 
     lon=pokemon['lng'], 
    ) 
    # Check if there isn't the same entry already 
    existing = session.query(Sighting) \ 
     .filter(Sighting.pokemon_id == obj.pokemon_id) \ 
     .filter(Sighting.spawn_id == obj.spawn_id) \ 
     .filter(Sighting.expire_timestamp > obj.expire_timestamp - 10)  \ 
     .filter(Sighting.expire_timestamp < obj.expire_timestamp + 10) \ 
     .filter(Sighting.lat == obj.lat) \ 
     .filter(Sighting.lon == obj.lon) \ 
     .first() 
    if existing: 
     return 
    session.add(obj) 

    f = open('i:\Games\Pokemon GO\pokeminer-0.2\spawn_location.csv','w')  
    f.write(pokemon_id+lon+lat+expire_timestamp)  
    f.close() 

Это потому, что Python не использует явные разделители для своих функций, как и другие языки (например, C ароматизированных языков, которые используют фигурные скобки {}). Вместо этого Python использует отступы для определения того, где начинаются функции и где они заканчиваются. def - это то, как вы запускаете функцию, а add_sighting - это имя функции. Все после этого (возможно) внутри функции, и поэтому должно быть отступом.