Python3 操作 csv 数据文件

很多情况下我们会从 Mongo 或者 MySQL 数据库中导出数据为 csv 格式的数据文件,就行下面这样

example.csv

Host,IP,Port,Status,Disk,Memory
"mysql-master","192.168.11.61",3306,"up",2048,32
"mysql-salve","192.168.11.62",3306,"up",3096,16
"mysql-salve","192.168.11.63",3306,"down",2048,16
"mycat","192.168.11.60",8066,"up",2048,16

读取数据

with open('example.csv') as f:
    f_csv = csv.reader(f)
    
    headers = next(f_csv)
    print(*headers)
    for row in f_csv:
        print(*row)

f_csv 会是一个迭代器,使用 next() 函数会得到文件的第一行内容, headersrow 返回的都是列表类型的数据

输出内容:

Host IP Port Status Disk Memory
mysql-master 192.168.11.61 3306 up 2048 32
mysql-salve 192.168.11.62 3306 up 3096 16
mysql-salve 192.168.11.63 3306 down 2048 16
mycat 192.168.11.60 8066 up 2048 16

假如你读入数据后不是想展示的,而是用这些数据中的某个字段的值,那么可以使用对应的索引来取值,但是我建议你用命名元组来包装一下这些数据。

from collections import namedtuple

with open('example.csv') as f:
    f_csv = csv.reader(f)
    headings = next(f_csv)
    Row = namedtuple('Row', headings)
    for r in f_csv:
        row = Row(*r)
        print(row.Hose)

输出内容

mysql-master
mysql-salve
mysql-salve
mycat

修改 csv 文件

假设,我把刚才的文件内修改一下,在最后添加一个字段 Other,之后再存入原来的文件,我可以这样做

import csv, os

with open('example.csv') as f, open('.example.csv', 'w', encoding='utf-8') as w_f:
    csv_rf = csv.reader(f)
    headers = next(csv_rf)
    
    # 添加表头字段
    headers.append('Other')

    rows = []
    for row in csv_rf:
        # 为每行添加值
        row.append("other")
        
        # 把每一行添加到列表
        rows.append(row)
    # 把可写文件对象给到模块的写方法,返回一个 csv 的写对象    
    csv_wf = csv.writer(w_f)

    # 写表头
    csv_wf.writerow(headers)

    # 写数据
    csv_wf.writerows(rows)
    
    # 删除原来的文件
    os.remove('example.csv')
    
    # 把含有新数据的文件名改为原来的文件名,实现修改文件
    os.rename('.example.csv', 'example.csv')

写入的数据源是列表字典

假如要写入到数据是一个列表,列表中是字典,每个字典是一行数据

headers = ['Host', 'IP', 'Port', 'Status', 'Disk', 'Memory', 'Other']

rows = [
    {'Host': 'mycat', 'IP': '192.168.11.60', 'Port': 8066, 'Status': 'up', 'Disk': '2048', 'Memory': '16', 'Other': 'other'},
    {'Host': 'mycat', 'IP': '192.168.11.60', 'Port': 8066, 'Status': 'up', 'Disk': '2048', 'Memory': '16', 'Other': 'other'}, 
    {'Host': 'mycat', 'IP': '192.168.11.60', 'Port': 8066, 'Status': 'up', 'Disk': '2048', 'Memory': '16', 'Other': 'other'}, 
    {'Host': 'mycat', 'IP': '192.168.11.60', 'Port': 8066, 'Status': 'up', 'Disk': '2048', 'Memory': '16', 'Other': 'other'}
]

那你可以直接就行写入到一个文件中,无序多余的处理

with open('host_info.csv','w') as f:
    f_csv = csv.DictWriter(f, headers)
    f_csv.writeheader()
    f_csv.writerows(rows)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python内置的csv模块来读取csv文件。以下是一个简单的示例: ```python import csv with open('file.csv', 'r') as file: reader = csv.reader(file) for row in reader: print(row) ``` 在上面的代码中,`open()`函数打开文件并返回一个文件对象。然后,我们使用csv模块中的`reader()`函数来创建一个reader对象,并将文件对象作为参数传递给它。最后,我们循环读取每一行数据并打印出来。 如果你的csv文件包含标题行,你可以使用`next()`函数跳过它,例如: ```python import csv with open('file.csv', 'r') as file: reader = csv.reader(file) next(reader) # 跳过标题行 for row in reader: print(row) ``` 如果你需要处理更复杂的csv文件,也可以考虑使用pandas库,它提供了更强大的数据处理和分析功能。 ### 回答2: 要用Python读取CSV数据文件,可以使用Python内置的csv模块。首先需要导入csv模块,然后通过open()函数打开CSV文件。在打开文件时,需要指定文件的路径和打开的模式,比如'r'代表只读模式。 接下来,可以使用csv模块提供的reader()函数创建一个CSV读取器。读取器会将CSV文件的每一行数据转换为一个列表,其中每个元素代表一个字段。读取器对象可以使用for循环逐行读取CSV文件的内容。 以下是一个示例代码,假设CSV文件名为data.csv: ``` import csv filename = 'data.csv' with open(filename, 'r') as file: reader = csv.reader(file) for row in reader: print(row) ``` 在这个示例中,首先导入csv模块。然后使用open()函数打开data.csv文件,并将文件对象赋值给file变量。使用with语句可以确保文件在使用完毕后正确关闭。 接着,使用csv.reader()函数创建一个读取器对象,并将文件对象传递给该函数。读取器对象赋值给reader变量。 最后,在for循环中,使用reader对象迭代读取CSV文件的每一行数据(以列表形式),并打印出来。 这样就可以使用Python读取CSV数据文件了。 ### 回答3: 使用Python读取CSV数据文件非常简单。首先,我们需要导入`csv`模块。然后,我们可以使用`open()`函数打开CSV文件,并创建一个CSV文件的读取器或迭代器。 以下是一个简单的示例代码: ```python import csv # 打开CSV文件 with open('data.csv', 'r') as file: # 创建CSV文件读取器 reader = csv.reader(file) # 逐行读取CSV文件数据 for row in reader: # 在这里,我们可以对每行数据进行处理 # 在这个示例中,我们只是打印每行数据 print(row) ``` 在这个示例中,我们假设我们的CSV文件名为`data.csv`。我们使用`open()`函数以只读模式打开文件,并将其赋值给`file`变量。然后,我们使用`csv.reader()`函数创建一个CSV文件读取器,并将其赋值给`reader`变量。 最后,我们使用`for`循环逐行读取CSV文件的数据。在循环内部,我们可以对每行数据进行处理。在这个示例中,我们只是简单地将每行数据打印出来。 通过这种方式,我们可以使用Python轻松读取CSV数据文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值