2016-09-22 13 views
-1

Привет, я довольно новичок в программировании и Python, и это мой первый пост, поэтому я приношу свои извинения за любую плохую форму.Как я могу удалить все лишние символы из списка строк для преобразования в ints

Я очищаю количество загрузок веб-сайта и получаю следующую ошибку при попытке конвертировать список номеров строк в целые числа, чтобы получить сумму. ValueError: неверный буквальный для междунаров() с основанием 10: «1.015»

Я попытался .Привернуть(), но это, кажется, не делать ничего.

И попытался построить, если заявление принять запятые из любой строки, которая содержит их: Does Python have a string contains substring method?

Вот мой код:

downloadCount = pageHTML.xpath('//li[@class="download"]/text()') 
    downloadCount_clean = [] 

    for download in downloadCount: 
     downloadCount_clean.append(str.strip(download)) 

    for item in downloadCount_clean: 
     if "," in item: 
      item.replace(",", "") 
    print(downloadCount_clean) 

    downloadCount_clean = map(int, downloadCount_clean) 
    total = sum(downloadCount_clean) 
+0

'.Привернуть()' _returns нового string_ с удалением нежелательных частей; он не изменяет существующую строку. Вам придется переназначить 'item' в _result_ функции:' item = item.replace (",", "") ' –

+0

Будет ли здесь задание' item'? Я думаю, что цикл копирует его (это тип значения), поэтому вы что-то меняете, но он не будет возвращен в список. Я думаю, вам нужно ссылаться на 'downloadCount_clean [index]', чтобы внести изменения. – BallpointBen

ответ

2

Строки не изменяемые в Python. Поэтому, когда вы вызываете item.replace(",", ""), метод возвращает то, что вы хотите, но он нигде не хранится (таким образом, не в item).

РЕДАКТИРОВАТЬ:

я предлагаю следующее:

for i in range(len(downloadCount_clean)): 
    if "," in downloadCount_clean[i]: 
     downloadCount_clean[i] = downloadCount_clean[i].replace(",", "") 

ВТОРОЙ РЕДАКТИРОВАТЬ:

Для немного больше простоты и/или элегантности:

for index,value in enumerate(downloadCount_clean): 
    downloadCount_clean[index] = int(value.replace(",", "")) 
+1

Вам было бы лучше добавить его в оригинальный 'downloadCount_clean.append', который позже сохранил бы очиститель кода. –

0

ДляРади простоты:

>>> aList = ["abc", "42", "1,423", "def"] 
>>> bList = [] 
>>> for i in aList: 
...  bList.append(i.replace(',','')) 
... 
>>> bList 
['abc', '42', '1423', 'def'] 

или работать только с одним списком:

>>> aList = ["abc", "42", "1,423", "def"] 
>>> for i, x in enumerate(aList): 
...  aList[i]=(x.replace(',','')) 
... 
>>> aList 
['abc', '42', '1423', 'def'] 

Не уверен, что если один нарушает какие-либо правила питона или нет :)