【问题标题】:Why is using .reader() skipping the first line and .readlines() isn't?为什么使用 .reader() 跳过第一行而 .readlines() 不是?
【发布时间】:2017-09-22 18:08:55
【问题描述】:

我正在尝试从 .csv 文件中读取所有数据。首先,我尝试使用 csv.reader(),但这会跳过我文件的第一行。我可以使用 .readlines() 来解决这个问题,但我想知道为什么 .reader() 会发生这种情况,并且想让它读取我的第一行。

import glob
import csv

new_cards = []
path = 'C:\\Users\\zrc\\Desktop\\GCData2\\*.asc'
files = glob.glob(path)


# First Method

for name in files:
    with open(name) as f:
        for line in f:
            reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
            for row in reader:
                new_cards.append(row)
print(len(new_cards))


# Second Method

for name in files:
    with open(name) as f:
        m = f.readlines()
        for line in m:
            new_cards.append(line)

print(len(new_cards))

【问题讨论】:

  • *.asc这是一个csv文件吗?
  • 你试过rows lib吗?让 csv 和结构化数据更易于阅读
  • @bhansa .asc 是我正在使用的程序写入它们的格式(它是一个数据用逗号分隔的文件)。我已经在这些文件上成功使用了 csv.reader() 。当我尝试一次做很多事情时,似乎遇到了麻烦。
  • 不要使用for line in f
  • @juanpa.arrivillaga 你是对的!

标签: python csv


【解决方案1】:

在你的第一个函数中你不需要使用for line in f: 这行是你的第一行,然后读者从第二行开始。

正确的做法应该是:

for name in files:
    with open(name) as f:
        reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
        for row in reader:
            new_cards.append(row)
print(len(new_cards))

您不需要遍历第一行中的每一行,因为您已经在使用 for row in reader: 进行操作

【讨论】:

    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2019-09-23
    相关资源
    最近更新 更多