- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试反转读取文件的方式。我正在使用 DictReader,因为我想要字典中的内容。我想读取文件中的第一行并将其用于键,然后反向(从下到上)解析文件,有点像 linux“tac”命令。是否有捷径可寻?下面是我将文件读入字典并将其写入文件的代码...
reader = csv.DictReader(open(file_to_parse, 'r'), delimiter=',', quotechar='"')
for line in reader:
# ...
这段代码可以正常处理文件,但是..我需要它从最后读取文件。
换句话说,我希望它读取文件:
fruit, vegetables, cars
orange, carrot, ford
apple, celery, chevy
grape, corn, chrysler
并能够让它返回:
{' cars': ' chrysler', ' vegetables': ' corn', 'fruit': 'grape'}
{' cars': ' chevy', ' vegetables': ' celery', 'fruit': 'apple'}
{' cars': ' ford', ' vegetables': ' carrot', 'fruit': 'orange'}
代替:
{' cars': ' ford', ' vegetables': ' carrot', 'fruit': 'orange'}
{' cars': ' chevy', ' vegetables': ' celery', 'fruit': 'apple'}
{' cars': ' chrysler', ' vegetables': ' corn', 'fruit': 'grape'}
最佳答案
您必须将整个 CSV 文件读入内存;您可以通过在阅读器对象上调用 list()
来实现:
with open(file_to_parse, 'rb') as inf:
reader = csv.DictReader(inf, skipinitialspace=True)
rows = list(reader)
for row in reversed(rows):
请注意,我在这里将文件用作上下文管理器以确保文件已关闭。您还想以二进制模式打开文件(将换行符处理留给 csv
模块)。您传递给 DictReader()
的其余配置是默认设置,因此我省略了它们。
我将 skipinitialspace
设置为 True,从您的示例输入和输出来看,您的定界符后确实有空格;该选项删除了这些。
csv.DictReader()
对象负责读取第一行作为键。
演示:
>>> import csv
>>> sample = '''\
... fruit, vegetables, cars
... orange, carrot, ford
... apple, celery, chevy
... grape, corn, chrysler
... '''.splitlines()
>>> reader = csv.DictReader(sample, skipinitialspace=True)
>>> rows = list(reader)
>>> for row in reversed(rows):
... print row
...
{'cars': 'chrysler', 'vegetables': 'corn', 'fruit': 'grape'}
{'cars': 'chevy', 'vegetables': 'celery', 'fruit': 'apple'}
{'cars': 'ford', 'vegetables': 'carrot', 'fruit': 'orange'}
关于Python csv.DictReader - 如何反转输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021540/
应该Dialect.strict在 DictReader 上,如果一行中的列数与标题列数不匹配,它会引发异常吗? The docs (强调我的): To make it easier to speci
这个问题已经有答案了: Skip first couple of lines while reading lines in Python file (9 个回答) 已关闭 3 年前。 我有一些 csv
我有一个包含内容(示例)的 .csv 文件 Attributes,Description,Dial-Up 4,2,0.2 3,1,0.4 使用字典阅读器: dictreader = csv.DictR
我有一个 Excel .CSV 文件,我正在尝试使用 DictReader 读入。 一切似乎都很好,除了它似乎省略了行,特别是那些缺少列的行。 我们的输入看起来像: mail,givenName,sn
我正在使用 DictReader 和 DictWriter 处理一个 csv 文件。 我尝试根据找到的以下代码工作 here : import csv fieldnames = ['Node', 'I
我有一个 CSV 文件,其中一些数据中嵌入了 NUL 字节。 给定 A B C D 列,C 列中的一个字段将包含如下数据 ,引号字符“一些数据”NUL“更多数据”NUL“数据结束”引号字符, 当我用
我已经阅读了一个 csv 文件, with open('test.csv', newline='') as csv_file: #restval = blank columns = -
我有一个 test.csv文件: foo,bar,foobar,barfoo 1,2,3,4 5,6,7,8 9,10,11,12 以及以下 CSV解析器: #!/usr/bin/env python
我的 csv 文件以分号作为分隔符。我可以用打开它 r = csv.reader(infile, delimiter=";") 没有任何问题。问题是我想将文件作为字典打开。 csv.DictReade
我有这个读取函数,它使用 csv.DictReader 读取 csv 文件。 file.csv 以逗号分隔,可完整读取。但是,我的文件的这一部分有一列包含多个逗号。我的问题是,如何确保逗号算作列的一部
我使用以下代码作为解析 FCC License View 的概念证明 sample data set : import csv if __name__ == '__main__': csv_f
圣诞快乐! 我有以下数据: a = (" 101, 151, 0,'T1',2,2,1, 1.71470E-1,-1.02880E-1,2,'NUCA GSU ',1, 1,
我使用csv.DictReader从 CSV 文件读取数据。当读取器被迭代时,它会生成带有从 CSV header 获取的键和每行值的字典: with open(filename) as h:
使用以下代码: import sys import os import csv if __name__ == '__main__': csvRaw = csv.dictreader(open(
我是 python 新手,尝试理解如何使用 csv.DictReader 上的过滤器函数来过滤 csv 文件中的行。 filter()可以用于“可迭代”,据我了解 DictReader适合这个defi
我使用 DictReader 指定字段名称,但并非所有列都有用,甚至包含数据。如何指定要标记哪些列?这是我的代码: my_tot_reader = csv.DictReader(tot_file, d
这个脚本工作正常,直到我点击一个空的单元格: import csv,time,string,os,requests dw = "\\\\network\\folder\\btc.csv" inv_fi
有没有一种方法可以模拟 DictReader 进行单元测试,而无需实际编写文件然后重新打开它。 我的函数接受一个 DictReader 实例,所以我可以轻松地传递给它们一个来测试它们的功能,但似乎无法
我正在尝试反转读取文件的方式。我正在使用 DictReader,因为我想要字典中的内容。我想读取文件中的第一行并将其用于键,然后反向(从下到上)解析文件,有点像 linux“tac”命令。是否有捷径可
def openFile(fileName): try: trainFile = io.open(fileName,"r",encoding = "utf-8") ex
我是一名优秀的程序员,十分优秀!