2016-07-12 2 views
0

Так что это мой код:я не понимаю, почему я не получаю «Нет» в моем выводе при запуске программы

import csv 

particle_counter = file('C:/Users/Desktop/Level 2 files/HiSAM1_data_160206_134230.csv','rU') 
gas_csv = file('C:/Users/Desktop/Level 2 files/gas_0.csv','rU') 
gps_csv = file('C:/Users/Desktop/Level 2 files/gps_0.csv','rU') 
pm2_5_csv = file('C:/Users/Desktop/Level 2 files/pm25_0.csv','rU') 


reader1 = csv.reader(particle_counter) 
reader2 = csv.reader(gas_csv) 
reader3 = csv.reader(gps_csv) 
reader4 = csv.reader(pm2_5_csv) 

def skipline(n,filename): 
    x =0 
    while x < n in filename: 
     reader = csv.reader(filename) 
     result = next(reader) 
     return result 


print(skipline(0,particle_counter)) 

Я пытался узнать, как вы пропустите заголовки файлов, имеют разное количество заголовков в одной функции. Тем не менее, я думаю, что я получил то, что мне нужно для того, чтобы сделать это, но когда я запускаю программу, я получаю:

In[21]: %run "C:/Users/Desktop/Level 2 files/skiplinefunction.py" 
None 

Что я ожидал случиться, что функция будет принимать каждый файл и пропустить количество строк заголовка что каждый отдельный файл имеет значение, пока оно не достигнет значений. Я попытался распечатать один файл, чтобы проверить, не пропустили ли строки в этом файле, но я получил None. Что это значит? есть ли что-то неправильное в моей программе, которое я не могу видеть? Как я могу это исправить?

+1

Пожалуйста, добавьте то, что вы ожидали *, вместо этого. Какова функция 'skipline()'? –

+0

@MartijnPietersI только что обновил вопрос с тем, что я ожидаю в функции :) – dontbadick

+0

Это не очень четкое объяснение. Вы хотите пропустить строки 'n' или * до *' n' строк * или *, если есть непустая строка? –

ответ

3

skipline() вернул его, и вы его распечатали. И skipline() вернулся, потому что ваш while тест никогда не может быть True:

while x < n in filename: 

Выражение x < n in filename является прикован сравнение и выполнен в виде x < n and n in filename. x < n уже ошибочно, так как оба x и n оба являются 0, но тест n in filename также неверен, потому что 0 никогда не будет элементом в последовательности строк.

Функция затем заканчивается без явного return, поэтому вместо этого выполняется по умолчанию return None, и вы печатаете этот результат.

Если вы хотите пропустить определенное количество строк в CSV-файле, сделайте это непосредственно либо в открытом объекте файла (чтобы пропустить строки, которые не читает CSV-ридер), либо на объектах считывателя. Для этого вам не нужно передавать имя файла. Используйте consume recipe из раздела рецептов itertools; для вашего случая, который сводится к использованию next(islice(iterator, n, n), None), см. Python CSV reader to skip 9 headers.

Применительно к вашей функции, которая бы:

from itertools import islice 

def skiplines(reader, n): 
    next(islice(reader, n, n), None) 

и использовать непосредственно на объектах читателя:

skiplines(particle_counter, 1) 

Функция ничего не возвращает.

+0

Я продолжаю получать этот код без использования этого кода. Зачем? :( – dontbadick

+0

@gokublack: Я ответил в своем ответе, почему: эта функция ничего не возвращает. Вся суть функции - пропустить определенное количество строк. Если вы хотите прочитать эти строки и распечатать их, просто сделайте это –

+0

@martin Pieters Я все еще пытаюсь понять, что вы сказали, хахаха нелегко, я просто не кодировал python недолго. Можете ли вы показать мне пример одного файла, чтобы я мог сделать все остальное?: D – dontbadick

0

В функции skipline():

def skipline(n,filename): 
    x =0 
    while x < n in filename: 
     reader = csv.reader(filename) 
     result = next(reader) 
     return result 

x = 0 и n = 0. Таким образом, ничего не анализируется, так как x < n оценивает False. Таким образом, функция возвращает значение по умолчанию None.

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