读取csv或tsv格式的文件时,经常需要读取跳过文件头,直接读取文件内容,假定我们要读取的文件格式如下:
data.tsv

id score review
1 5.0 This is a good product
2 3.0 Not so bad

我们只需读取文件数据而无需文件头信息,那么最简单的方法就是打开文件后在循环中判断是否为第一行,是第一行则跳过:

with open('data.tsv', 'r') as f:
	lines = f.readlines()
	for line_counter, line in emunerate(lines):
		if line_counter != 0:	# skip first line of the file
			# process data
f.close()

但是这种写法在每次循环中都要做一次if判断,很耗时,下面给定几种更为高效的方法:

  • 使用next函数
with open('data.tsv', 'r') as f:
	next(f)		# skip first line
	lines = f.readlines()
	for line in lines:
		# process data
f.close()

如果需要文件头,则可将next函数的返回值存入变量中:

first_line = next(f)
  • 直接从第二行开始读取

f.readlines()函数返回的是一个保存了每行内容的list,根据此特性可以直接从第二行开始获取

with open('data.tsv', 'r') as f:
	lines = f.readlines()[1:]	# get [1, ...n) elements with index starts from 0
	for line in lines:
		# process data
f.close()
  • 使用itertools包
from itertools import islice  
with open('data.tsv', 'r') as f: 
	for line in islice(f, 1, None):  
    	# process data
f.close()

这个工具有个好处就是可以根据参数从任一行开始读取,例如在islice()函数的第二个参数中传入5,则表示从第5行开始读取。

Python编程时,经常需要跳过第一行读取文件内容。简单的做法是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作。 相应的Python代码如下: input_file = open(C:\\Python34\\test.csv) line_num = 0 for line in input_file: line_num += 1 if (line_num != 1): do_readline() 然而这样每次迭代都需要判断一次,增加了时间开销,一种高效的做法是导入islice这个函数,islice函数使用说明如下 with open('datasets/diabetes.csv') as data_file: data_csv = csv.reader(data_file) row_num = 0 for row in islice(data_csv, 1, None) Python编程时,经常需要跳过第一行读取文件内容。比较容易想到是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作。相应的Python代码如下: input_file = open("C:\\Python34\\test.csv") line_num = 0 for line in islice(input_file, 1, None): 可以使用 pandas 的 DataFrame.to_csv() 函数来实现。 你需要先建立一个包含新增数据的 DataFrame,然后使用该函数将其写入 CSV 文件中。 import pandas as pd# 建立新的 DataFrame df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c']) # 将 D... 在用java读取CSV文件时,在读取表头信息时一直获取不到对应的字段,而csv文件中,看不出多出来\uFEFF这个编码 举个例子,正常的表头的中文应该是 "日期",但是CVS文件中实际却是 "\uFEFF日期"这样的,但看起来和"日期"没啥区别,所以解析获取的时候就出错了,以下是使用java对这种情况的处理: * 去除 字符串收尾的 特殊的Unicode [ "\uFEFF"... Python编程时,经常需要跳过第一行读取文件内容。比较容易想到是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作。相应的Python代码如下:input_file = open("C:\\Python34\\test.csv")line_num = 0for line in islice(input_file, 1, None):line_num +... 在我们的csv文件中,第一行往往是由代表每列数据的标签组成的标题行,如下图所示。这时,如果我们想要跳过第一行的标题内容,可以使用next函数,代码修改如下。此时我们用下列代码进行csv文件行数据的读取。可以得到下图所示的结果。... import csv with open('表格/2019-04-01.csv', 'r') as read_file: reader = csv.reader(read_file) for row in reader: print(row) 如果需要跳过第一行,可以每次判断行数是否为1。但这样写的代码执行效率偏低,因为每次都需要判断当前的行号。 使用Python提供的iter I was choosing a new credit card and was between two options. One of them offered cash back on all purchases. The other offered 在用MR或Spark处理较大的csv文件时,经常会遇到这么一个问题,csv文件的第一行往往是列名,怎么办呢? guo@guo:~$ sed 1d dual.txt > noheader.txt 用sed 1d就可以把dual.txt文件的第一行去掉,>是指将前面的命令的结果覆盖到noheader.txt,>>就是追加了。还不懂可以看一下我写的shell基础。