我不明白为什么我会得到一个'无'在运行程序时我的输出

时间:2016-07-12 18:04:19

标签: python csv header

所以这是我的代码:

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

我期望发生的是该函数将获取每个文件并跳过每个文件所具有的标题行数,直到达到值。我尝试打印一个文件,看它是否在该文件上划线,但我得到了无。 那是什么意思?我的计划中有什么不对,我似乎无法看到?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

skipline()退回了,你就打印出来了。并且skipline()返回了它,因为您的while测试永远不会是True

while x < n in filename:

表达式x < n in filename链式比较,并以x < n and n in filename执行。 x < n已经错误,因为xn都是0,但测试n in filename也是假的,因为0永远不会是字符串序列中的元素。

然后该函数在没有明确return的情况下结束,因此执行默认的return None,然后打印该结果。

如果要跳过CSV文件中的特定行数,请直接在打开的文件对象(跳过CSV阅读器不应解析的行)或阅读器对象上执行此操作。您不需要传入文件名。使用itertools recipes部分中的consume recipe;对于使用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)

该功能不会返回任何内容。

答案 1 :(得分:0)

skipline()函数中:

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

x = 0n = 0。因此,x < n评估为False时,没有任何内容被解析。因此,该函数返回默认值None