@evertyn

Почему не работает код?

Есть код

file = open('population_txt.rtf')
city = file.read()
file.close()

for vivod in city.split():
    if vivod.startswith('G') and int(city.strip().split("\t")[1])>500000:
        print(vivod)


На многих сайтах подобное без проблем, как говорили - работает. У меня не фурычит, выдавая ошибку
ValueError: invalid literal for int() with base 10: '1368050000\nIndia'

Что я не так делаю, подскажите, пожалуйста.
Задача - из файла, где указаны города и численность населения в них, вывести на экран названия городов, которые начинаются на букву G и имеют население более 500000.

China	1368050000\
India	1266480000\
United States	320341000\
Indonesia	255461700\
Brazil	203841000\
Pakistan	188894000\
Nigeria	183523000\
Bangladesh	157784000\
Russia	146270033\
Japan	127020000\
Mexico	121005815\
Philippines	100959800\
Vietnam	90730000\
Ethiopia	90076012\
Egypt	87965900\
Germany	80767000\
Iran	78096500\
Turkey	77695904\
Democratic Republic of the Congo	71246000\


(Вот часть того файла)
  • Вопрос задан
  • 213 просмотров
Решения вопроса 1
@evertyn Автор вопроса
Вопрос закрыт, допёр как сделать это.
Вытащил разделением в переменные, прислушавшись к советам удалить реплейсом слеши, ну и решил сделать через when open, а не префункционное чтение и закрытиеa
Спасибо всем больше
with open('population_txt.rtf') as f:
    for line in f:
        n, p = line.split('\t')
        if n.startswith('G') and int(p.strip().replace('\\','')) > 500000:
            print(n)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Очевидно, что split(“\t”) ничего не сможет поделать со строкой '1368050000\nIndia', где нет \t
Ответ написан
Maksim_64
@Maksim_64
Data Analyst
Ну что бы ваш код заработал, (почти ничего не меняя) то вот так должно заработать (избавляемся от \ используя replace и берем первый с конца элемент, а не первый как у вас) по крайней мере на том кусочке файла что есть он работает.
for vivod in city.split():
    if vivod.startswith('G') and int(city.strip().replace('\\','').split(" ")[-1])>500000:
        print(vivod)


Ну а так по серьезней парсинг бы написать следовало бы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы