在Python中,你可以使用标准的csv模块轻松地读写csv文件。
例如,假设你有以下的csv,sample.csv。
11,12,13,14
21,22,23,24
31,32,33,34
这可以解读为:。
import csv
with open('data/src/sample.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']
这里你需要注意的是,当逗号后有一个空格。通常情况下,逗号后不应该有不必要的空格,但有时我看到文件里有空格。
在这种情况下,默认情况下,空白处不会被忽略,文件会被原样读取。
11, 12, 13, 14
21, 22, 23, 24
31, 32, 33, 34
换句话说,如果你在读取上述文件时,在逗号后面加上空格,输出结果将是这样的
with open('data/src/sample_space.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['11', ' 12', ' 13', ' 14']
# ['21', ' 22', ' 23', ' 24']
# ['31', ' 32', ' 33', ' 34']
如果你在csv.reader中指定以下内容,逗号后的空格将被跳过。skipinitialspace=True
with open('data/src/sample_space.csv', 'r') as f:
reader = csv.reader(f, skipinitialspace=True)
for row in reader:
print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']
在上面这样一个简单的例子中,你可以用strip()来删除空白。问题是当它被双引号所包围时,比如下面的例子。
"one,one", "two,two", "three,three"
被双引号包围的部分应被视为一个单一的元素,但如果skipinitialspace=False(默认),它将看起来像下面这样。
with open('data/src/sample_double_quotation.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['one,one', ' "two', 'two"', ' "three', 'three"']
这可以通过设置skipinitialspace=True来实现。
with open('data/src/sample_double_quotation.csv', 'r') as f:
reader = csv.reader(f, skipinitialspace=True)
for row in reader:
print(row)
# ['one,one', 'two,two', 'three,three']
用pandas中的read_csv()读取csv文件时也是如此。如果csv文件的逗号后有一个空格,你可以这样做。read_csv(skipinitialspace=True)