2014-10-16 4 views
0

Извините, если мой код ужасен, я только начал изучать Python.CSV-выходы в одну ячейку

Я очищаю данные из файла HTML и пытаюсь записать в CSV.

Проблема в том, что он записывает весь контент в одну ячейку.

for table in soup.find_all('table', class_='players-table'): 
    for headers in soup.find_all('thead'): 
     for y in headers.findAll('th'): 
       [csvHeader.append(i) for i in y if y.getText() != ''] 


counter = 0 

myfile = open('/Users/andrew/Documents/Projects/Football Data/ppi.csv', 'wb') 
wr = csv.writer(myfile, delimiter=',', lineterminator='\n', quoting=csv.QUOTE_MINIMAL) 
c = csv.writer(myfile) 
c.writerow(csvHeader) 



for table in soup.find_all('table', class_='players-table'): 
    for headers in soup.find_all('tbody'): 
     for rows in headers.findAll('tr'): 
      for x in rows.findAll('td'): 
       if x.getText() !='': 
        csvRows_temp.append(x.getText().replace('\n       ','').replace('\n      ','')) 
        counter +=1 
       if counter == 13: 
        myList = [','.join(csvRows_temp).encode('utf8').strip()] 
        csvRows_temp.append('\n') 
        c.writerow(myList) 
        csvRows_temp[:] = [] 
        myList[:] = [] 
        counter = 0 

Выход заключается в следующем: enter image description here

Как я могу сделать это написать в каждой ячейке вместо того, чтобы передать его в одну ячейку в каждой строке?

+0

Вопросы, ищущих отладки помощи ("? Почему не этот код работает") должен включать желаемого поведения, конкретной проблемы или ошибки и кратчайшего кода, необходимого для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). –

+0

Если вы не против, где вы нашли HTML-файл, который хотите очистить? Меня тоже интересуют данные о футболе. – GiannisIordanou

+0

evil_inside, http://www.premierleague.com/en-gb/players/ea-sports-player-performance-index.html EA предоставляет индекс производительности игрока для премьер-лиги Barclay. Если вы измените результаты на страницу на все, кроме 20, а затем измените paramItemsPerPage с URL на 999, вы получите полный список данных. –

ответ

1

Эта линия:

myList = [','.join(csvRows_temp).encode('utf8').strip()] 

создает список с ровно один элемент, строку с несколькими запятыми в нем.

Try:

myList = csvRows_temp 

или, возможно, если вы думаете, нужна обработка текста:

myList = [x.encode('utf8').strip() for x in csvRows_temp] 
+0

Мне нужна текстовая обработка, данные содержат довольно много символов Юникода. Последний пример, который ты мне дал, работал как сон! Спасибо, Роб. –

Смежные вопросы