Python-列表、字典写入保存读取(txt、csv、xlsxlsx、npy)

Python-列表、字典写入保存读取(txt、csv、xlsxlsx、npy),第1张

Python-列表、字典写入保存读取(txt、csv、xls/xlsx、npy)

Python-列表、字典存取txt、csv、xls/xlsx、npy
  • 前言
  • 1. 列表
    • 1.1 txt文件
      • 1.1.1 一维列表
        • 1.1.1.1 保存txt文件
        • 1.1.1.2 读取txt文件
      • 1.1.2 二维列表
        • 1.1.2.1 保存txt文件
        • 1.1.2.2 读取txt文件
    • 1.2 csv文件(不借助pandas)
      • 1.2.1 一维列表保存
      • 1.2.2 二维列表保存
    • 1.3 csv文件(借助pandas)
      • 1.3.1 一维列表
        • 1.3.1.1 保存csv文件
        • 1.3.1.2 读取csv文件
      • 1.3.2 二维列表
        • 1.3.2.1 保存csv文件
        • 1.3.2.2 读取csv文件
    • 1.4 xls/xlsx文件
      • 1.4.1 一维列表
        • 1.4.1.1 保存xls/xlsx文件
        • 1.4.1.2 读取xls/xlsx文件
      • 1.4.2 二维列表
        • 1.4.2.1 保存xls/xlsx文件
        • 1.4.2.2 读取xls/xlsx文件
    • 1.5 npy文件
      • 1.5.1 一维列表
      • 1.5.2 二维列表
  • 2. 字典
    • 2.1 保存到txt文件
    • 2.2 csv文件
      • 2.2.1 不带表头
        • 2.2.1.1 保存csv文件
        • 2.2.1.2 读取csv文件
      • 2.2.2 带表头
        • 2.2.2.1 保存csv文件
        • 2.2.2.2 读取csv文件
    • 2.3 保存与读取xls/xlsx文件
    • 2.4 保存与读取npy文件


前言

本文主要记录Python-实现文件存取的相关笔记,涉及到列表、字典类型的数据如何保存到npy、txt、csv、xsl、xslx格式的文件,所有 *** 作都有源码附在下方,且有大量的源码配套生成结果图示,可以适应大多数情况下存取文件需求。


1. 列表

列表将以一维和二维列表为例进行举例,二维可以通多维,融会贯通。

1.1 txt文件 1.1.1 一维列表 1.1.1.1 保存txt文件
node = [1, 2, 3]
file = open('node.txt', 'a')
mid = str(node).replace('[', '').replace(']', '')
# 删除单引号并用字符空格代替逗号
mid = mid.replace("'", '').replace(',', '') + 'n'
file.write(mid)
file.close()

生成文件内容效果如下:

1.1.1.2 读取txt文件

使用numpy读取:

import numpy as np

node_pair1 = np.loadtxt('./node.txt', dtype=bytes).astype(int)
node_pair = list(node_pair1)
print(node_pair)

不使用numpy读取:

node_pair = []
with open('./node_pair.txt', 'r', encoding='utf-8') as f:
    data = f.readlines()
    for line in data:
      	# 将字符串以空格和'n'分割,然后转换为int类型的数组赋值给elem
        elem = list(map(int, line.split()))
        node_pair.append(elem)
f.close()
print(node_pair)

输出结果如下:

1.1.2 二维列表 1.1.2.1 保存txt文件
node_pair = [[1, 2], [2, 3]]
file = open('node_pair.txt', 'a')
for i in range(len(node_pair)):
    # 去除[]
    mid = str(node_pair[i]).replace('[', '').replace(']', '')
    # 删除单引号并用字符空格代替逗号
    mid = mid.replace("'", '').replace(',', '') + 'n'
    file.write(mid)
file.close()

生成文件内容效果如下:

1.1.2.2 读取txt文件

使用numpy读取:

import numpy as np

node_pair1 = np.loadtxt('./node_pair.txt', dtype=bytes).astype(int)
node_pair = []
for item in node_pair1:
    node_pair.append(list(item))
print(node_pair)

不使用numpy读取:

node_pair = []
with open('./node_pair.txt', 'r', encoding='utf-8') as f:
    data = f.readlines()
    for line in data:
      	# 将字符串以空格和'n'分割,然后转换为int类型的数组赋值给elem
        elem = list(map(int, line.split()))
        node_pair.append(elem)
f.close()
print(node_pair)

输出结果如下:

1.2 csv文件(不借助pandas) 1.2.1 一维列表保存
import codecs
import csv

node = [1, 2, 3]
file_csv = codecs.open('node_csv.csv', 'w+', 'utf-8')
mid = csv.writer(file_csv, delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL)
mid.writerow(node)

生成文件内容效果如下:

1.2.2 二维列表保存
import codecs
import csv

node_pair = [[1, 2], [2, 3]]
file = open('node_pair_csv.csv', 'a')
file_csv = codecs.open('node_pair_csv.csv', 'w+', 'utf-8')
mid = csv.writer(file_csv, delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL)
for i in node_pair:
    mid.writerow(i)

生成文件内容效果如下:

1.3 csv文件(借助pandas)

实现列表保存到csv文件还可以借助pandas,下面对其进行说明。

1.3.1 一维列表 1.3.1.1 保存csv文件
import codecs
import csv

node = [1, 2, 3]
mid = pd.Dataframe(node)
mid.to_csv('./node_csv.csv', header=False, index=False)

生成文件内容效果如下:

此时保存的数据不再是成一行,而是成为了一列,如果想要变为一行来保存,可以在列表外再套一层列表即可。

import codecs
import csv

node = [[1, 2, 3]]
mid = pd.Dataframe(node)
mid.to_csv('./node_csv.csv', header=False, index=False)

生成文件内容效果如下:

1.3.1.2 读取csv文件
import pandas as pd
mid = list(pd.read_csv('./node_csv.csv'))
mid1 = []
for item in mid:
    mid1.append(int(item))
print(mid1)

因为上面直接使用list()转换后,mid内的列表元素变为了字符类型,故新建mid1重新赋值为int类型。输出如下:

1.3.2 二维列表 1.3.2.1 保存csv文件
import codecs
import csv

node_pair = [[1, 3], [2, 3]]
mid = pd.Dataframe(node_pair)
mid.to_csv('./node_pair_csv.csv', header=False, index=False)

生成文件内容效果如下:

1.3.2.2 读取csv文件
import numpy
mid = np.loadtxt('./node_pair_csv.csv', delimiter=',', dtype=int)
node_pair = []
for item in mid:
    node_pair.append(list(item))
print(node_pair)

生成文件内容效果如下:

1.4 xls/xlsx文件 1.4.1 一维列表 1.4.1.1 保存xls/xlsx文件
import pandas as pd

node = [1, 2, 3]
mid = pd.Dataframe(node)
mid.to_excel(r'node_xlsx.xlsx', header=False, index=False)

生成文件内容效果如下:

同1.3.1一样如果需要将数据都记录在第一行时,只需要在列表外部再套一层列表。

1.4.1.2 读取xls/xlsx文件

读取xls/xlsx文件,这里有一个需要注意的地方,有些人直接使用下面的语句打开xlsx文件会报错,打开xls文件就没问题,这主要是由于xlrd模块版本更新的问题,将版本退回到1.2.0即可正常运行。还有其他解决办法,请单击此处跳转:

import pandas as pd
mid = list(pd.read_excel('./node_xlsx.xlsx', header=None))
print(mid)

输出如下:

1.4.2 二维列表 1.4.2.1 保存xls/xlsx文件
import pandas as pd

node_pair = [[1, 3], [2, 3]]
mid = pd.Dataframe(node_pair)
mid.to_excel(r'node_pair_xlsx.xlsx', header=False, index=False)

生成文件内容效果如下:

1.4.2.2 读取xls/xlsx文件
import xlrd
data = xlrd.open_workbook(r'./node_pair_xlsx.xlsx')  # 获取文本对象
table = data.sheets()[0]  # 根据index获取某个sheet
rows = table.nrows  # 获取当前sheet页面的总行数,把每一行数据作为list放到 list
result = []
for i in range(rows):
    col = table.row_values(i)  # 获取每一行数据
    mid = []
    for item in col:
        mid.append(int(item))
    result.append(mid)
print(result)

生成文件内容效果如下:

1.5 npy文件

.npy文件是numpy专用的二进制文件

1.5.1 一维列表
import numpy as np

node = [1, 2, 3]
np.save('node.npy', node_pair)  # 保存文件

a = np.load('node.npy', allow_pickle=True)  # 读取文件
node = []
for item in a:  # 将ndarray转换为原字典类型
    node.append(item)
print(node)

生成文件无法直接打开,这里与加载一起写在代码里了,输出效果如下:

1.5.2 二维列表
import numpy as np

node_pair = [[1, 3], [2, 3]]
np.save('node_dict.npy', node_pair)  # 保存文件

mid = np.load('node_dict.npy', allow_pickle=True)  # 读取文件
node_pair = []
for item in mid:  # 将ndarray转换为原字典类型
    node_pair.append(list(item))
print(node_pair)

生成文件无法直接打开,这里与加载一起写在代码里了,输出效果如下:

2. 字典 2.1 保存到txt文件
node_dict = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
mid = str(node_dict)
f = open('node_dict.txt', 'w')
f.writelines(mid)
f.close()

生成文件内容效果如下:

2.2 csv文件

字典类型数据保存到csv文件需要先转换为Dataframe类型,转换完成后再使用to_csv()函数进行保存。

2.2.1 不带表头 2.2.1.1 保存csv文件
import pandas as pd

node_dict = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
mid = pd.Dataframe(list(node_dict.items()))
# 保存csv
mid.to_csv('./node_dict.csv', header=False, index=False)

生成文件内容效果如下:

2.2.1.2 读取csv文件
import pandas as pd
mid = pd.read_csv('./node_dict.csv', header=None)
print(mid)
mid = mid.set_index(0)[1].to_dict()  # 转换为原字典类型
print(mid)

输出读入的不带表头的csv文件:

2.2.2 带表头 2.2.2.1 保存csv文件
import pandas as pd

node_dict = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
mid = pd.Dataframe(list(node_dict.items()))
mid.to_csv('./node_dict_title.csv', header=['h1', 'h2'], index=False)

生成文件内容效果如下:

2.2.2.2 读取csv文件
import pandas as pd
mid = pd.read_csv('./node_dict_title.csv')
print(mid)
mid = mid.set_index('h1')['h2'].to_dict()  # 转换为原字典类型
print(mid)

输出读入的带表头的csv文件及转换后的源字典:

2.3 保存与读取xls/xlsx文件
import pandas as pd

node_dict = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
mid = pd.Dataframe(list(node_dict.items()))
mid.to_excel('./node_dict.xls', header=False, index=False)

生成文件内容效果如下:

读取xls/xlsx文件的 *** 作与读取csv文件的 *** 作基本没有差别,只需要将pd.read_csv()函数变为pd.read_excel()即可。

2.4 保存与读取npy文件
import numpy as np

node_dict = {'a': [1, 2],'b': [2, 3]}
np.save('node_dict.npy', node_dict)  # 保存文件

a = np.load('node_dict.npy', allow_pickle=True).item()  # 读取文件
print(a)

生成文件无法直接打开,这里与加载一起写在代码里了,输出效果如下:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5670992.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存