如何使用Python读取和写入CSV文件?

如何使用Python读取和写入CSV文件?,python,csv,Python,Csv,我有一个包含内容的文件example.csv 1,"A towel,",1.0 42," it says, ",2.0 1337,is about the most ,-1 0,massively useful thing ,123 -2,an interstellar hitchhiker can have.,3 如何使用Python阅读这个example.csv 同样,如果我有 data = [(1, "A towel,", 1.0), (42, " it says, ",

我有一个包含内容的文件
example.csv

1,"A towel,",1.0
42," it says, ",2.0
1337,is about the most ,-1
0,massively useful thing ,123
-2,an interstellar hitchhiker can have.,3
如何使用Python阅读这个
example.csv

同样,如果我有

data = [(1, "A towel,", 1.0),
        (42, " it says, ", 2.0),
        (1337, "is about the most ", -1),
        (0, "massively useful thing ", 123),
        (-2, "an interstellar hitchhiker can have.", 3)]

如何使用Python将
数据写入CSV文件?

以下是一些如何读取CSV文件以及如何使用Python写入CSV文件的最简单完整示例

Python 3:读取CSV文件 纯Python

import csv

# Define data
data = [
    (1, "A towel,", 1.0),
    (42, " it says, ", 2.0),
    (1337, "is about the most ", -1),
    (0, "massively useful thing ", 123),
    (-2, "an interstellar hitchhiker can have.", 3),
]

# Write CSV file
with open("test.csv", "wt") as fp:
    writer = csv.writer(fp, delimiter=",")
    # writer.writerow(["your", "header", "foo"])  # write header
    writer.writerows(data)

# Read CSV file
with open("test.csv") as fp:
    reader = csv.reader(fp, delimiter=",", quotechar='"')
    # next(reader, None)  # skip the headers
    data_read = [row for row in reader]

print(data_read)
然后,读取
数据的内容

[['1', 'A towel,', '1.0'],
 ['42', ' it says, ', '2.0'],
 ['1337', 'is about the most ', '-1'],
 ['0', 'massively useful thing ', '123'],
 ['-2', 'an interstellar hitchhiker can have.', '3']]
请注意,CSV只读取字符串。您需要手动转换为列类型

Python 2+3版本在()之前就已经出现了,但是。删除Python2内容大大简化了这个答案

相关的
  • :如果您希望使用Flask动态提供CSV,而不实际将CSV存储在服务器上,那么这很有趣
微处理器 查看我的实用程序包,了解一个超级简单且易于记忆的实用程序包:

import mpu.io
data = mpu.io.read('example.csv', delimiter=',', quotechar='"', skiprows=None)
mpu.io.write('example.csv', data)
熊猫 有关更多信息,请参阅。请注意,pandas会自动推断是否存在标题行,但您也可以手动设置标题行

如果你没听说过,我建议你看看

其他 许多其他库都支持读取CSV文件,例如:

创建的CSV文件 通用文件结尾
.csv

处理数据 将CSV文件读取到元组/dict列表或熊猫数据帧后,它只需处理此类数据。没什么特别的

选择
  • JSON:非常适合编写人类可读的数据;非常常用()
  • CSV:超简单格式()
  • YAML:很好读,类似于JSON()
  • pickle:一种Python序列化格式()
  • ():更紧凑的表示法()
  • ():很适合矩阵()
  • XML:也存在*叹息*(&)
对于您的应用程序,以下内容可能很重要:

  • 其他编程语言的支持
  • 阅读/写作表现
  • 紧凑度(文件大小)
另见:

如果您正在寻找制作配置文件的方法,您可能需要阅读我的短文

编写CSV文件 首先,您需要导入csv

例如:

import csv

with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                        quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

使用熊猫读取csv文件

use pd.read_csv("D:\\sample.csv")

using only python :

fopen=open("D:\\sample.csv","r") 

print(fopen.read())
创建并写入csv文件

下面的示例演示如何创建和写入csv文件。要制作一个动态文件编写器,我们需要导入一个包导入csv,然后需要创建一个具有文件引用的文件实例,例如:

with open("D:\sample.csv","w",newline="") as file_writer
这里,如果文件不存在于所提到的文件目录中,那么python将在指定的目录中创建一个相同的文件,
w
表示写入,如果要读取文件,则用
r
替换
w
,或者附加到现有文件中,然后
a

newline=“”
指定每次创建行时它都会删除一个额外的空行,因此为了消除空行,我们使用
newline=“”
,使用如下列表创建一些字段名(列名):

fields=["Names","Age","Class"]
然后应用于writer实例,如:

writer=csv.DictWriter(file_writer,fieldnames=fields)
这里使用Dictionary writer并分配列名,要将列名写入csv,我们使用
writer.writeheader()
,要写入值,我们使用
writer.writerow({“names”:“John”,“Age”:20,“Class”:“12A”})
,而写入文件值必须使用Dictionary方法传递,这里的键是列名,值是您各自的键值

导入csv:

with open("D:\sample.csv","w",newline="") as file_writer:

fields=["Names","Age","Class"]

writer=csv.DictWriter(file_writer,fieldnames=fields)

writer.writeheader()

writer.writerow({"Names":"John","Age":21,"Class":"12A"})

如果需要-在不使用csv模块的情况下读取csv文件:

rows = []
with open('test.csv') as f:
    for line in f:
        # strip whitespace
        line = line.strip()
        # separate the columns
        line = line.split(',')
        # save the line for use later
        rows.append(line)

这是一个很好的例子,因为我刚刚发现了很多重复的问题,这些问题的框架不同,但本质上就是这个问题。重复的例子:……当你搜索“@icedwater”时,会出现更多重复的问题。这是一种可能。但是,我更喜欢熊猫:(1)它会自动处理标题(2)它直接从路径加载文件,不需要文件指针(3)它有更好的“导出”选项(如dict导出-是的,你也可以用CSV来实现。但是熊猫更简单)。但是,请随意发布一个解决方案,不需要熊猫:-)谢谢,我想知道,因为您使用了
csv
进行写作。我更喜欢
csv
pandas
,而
csv
胜过
pandas
,因为它很可能已经存在了。@icedwater好的,我添加了一个纯
csv
解决方案(现在在结构上也与我对其他文件格式(如YAML和JSON)的回答一致)@Aran Fey谢谢!我不知道。我修好了@阿兰菲再次感谢:-)我更改了代码,并将在下班后调整mpu。。。正确阅读CSV比它应该的要复杂^^^虽然这段代码可能是一个有效的答案,但一些解释可能会有所帮助。不确定这在现有答案上增加了什么
writer=csv.DictWriter(file_writer,fieldnames=fields)
with open("D:\sample.csv","w",newline="") as file_writer:

fields=["Names","Age","Class"]

writer=csv.DictWriter(file_writer,fieldnames=fields)

writer.writeheader()

writer.writerow({"Names":"John","Age":21,"Class":"12A"})
rows = []
with open('test.csv') as f:
    for line in f:
        # strip whitespace
        line = line.strip()
        # separate the columns
        line = line.split(',')
        # save the line for use later
        rows.append(line)