如何将新列添加到 CSV 文件行的开头?
我有一个 csv 文件,其中有 6 到 8 列。
例如:
ID Test Description file-name module view path1 path2
我想在开头添加新列 (Node
)。
前任:
Node ID Test Description file-name module view path1 path2
I have one csv file in which I have 6 to 8 column.
Ex:
ID Test Description file-name module view path1 path2
I want to add new column (Node
) to the beginning.
Ex:
Node ID Test Description file-name module view path1 path2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
csv
模块的DictReader
和DictWriter
类可以很容易地做到这一点。下面是一个示例,它一次性读取旧文件并写入新文件。DictReader
实例将文件的每个逻辑行或行作为字典返回,其键是字段名称。您可以显式指定字段名称,也可以从文件的第一行读取它们(如下面的示例所示)。在创建
DictWriter
实例时,您必须指定所需的字段名称,并且字段名称的顺序定义了它们在输出文件的每一行上出现的顺序。在这种情况下,新的字段名称只是添加到输入文件中的名称列表的开头 - 无论它们是什么。如果这是输入文件的内容:
这将是运行脚本后生成的输出文件的内容:
请注意,使用
dict(row, Node='node %s 将字段的数据添加到每一行' % node)
仅当字段名称是有效关键字参数(即有效的 Python 标识符)时才有效,如Node
。有效标识符只能由字母、数字和下划线组成,但不能以数字或下划线开头,并且不能是语言关键字,例如
class
、for
、返回
、全局
、传递
等。
此限制的解决方法是手动更新每个
row
字典,因为字段名称不能用作关键字参数:It would be fairly easy to do using the
csv
module'sDictReader
andDictWriter
classes. Here's an example that reads the old file and writes the new one in single pass.A
DictReader
instance returns each logical line or row of the file as a dictionary whose keys are the field names. You can explicitly specify the field names or they can be read from the first line of the file (as is done in the example below).You must specify the desired field names when creating a
DictWriter
instance and the order of the field names defines the order they will appear on each line of the output file. In this case the new field name is simply added to beginning of the list of names from the input file — whatever they may be.If this was the contents of the input file:
This would be the contents of the resulting output file after running the script:
Note that adding the data for a field to each row with
dict(row, Node='node %s' % node)
as shown only works when the field name is a valid keyword argument (i.e. valid Python identifier) — likeNode
.Valid identifiers consist only of letters, digits, and underscores but not start with a digit or underscore, and cannot be language keyword such as
class
,for
,return
,global
,pass
, etc.The workaround for this limitation is to update each
row
dictionary manually since the field name cannot be used as a keyword argument:您可以使用 CSV 模块读取 CSV 文件并写出带有附加列的编辑版本。请记住,添加列就是在每行末尾添加一个额外的条目。
使用 CSV 模块输出的示例 (http://docs.python.org/library/csv. html)
You can use the CSV module to read in your CSV file and write out an edited version with an appended column. Remember that adding a column is adding an extra entry to the end of each line.
An example of outputting with the CSV module (http://docs.python.org/library/csv.html)