所以这是我的代码:
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
我期望发生的是该函数将获取每个文件并跳过每个文件所具有的标题行数,直到达到值。我尝试打印一个文件,看它是否在该文件上划线,但我得到了无。 那是什么意思?我的计划中有什么不对,我似乎无法看到?我该如何解决这个问题?
答案 0 :(得分:2)
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阅读器不应解析的行)或阅读器对象上执行此操作。您不需要传入文件名。使用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 = 0
和n = 0
。因此,x < n
评估为False
时,没有任何内容被解析。因此,该函数返回默认值None
。