- 前言
- 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()
生成文件内容效果如下:
使用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)
输出结果如下:
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()
生成文件内容效果如下:
使用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)
输出结果如下:
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)
生成文件内容效果如下:
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)
生成文件内容效果如下:
实现列表保存到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)
生成文件内容效果如下:
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类型。输出如下:
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)
生成文件内容效果如下:
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)
生成文件内容效果如下:
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一样如果需要将数据都记录在第一行时,只需要在列表外部再套一层列表。
读取xls/xlsx文件,这里有一个需要注意的地方,有些人直接使用下面的语句打开xlsx文件会报错,打开xls文件就没问题,这主要是由于xlrd模块版本更新的问题,将版本退回到1.2.0即可正常运行。还有其他解决办法,请单击此处跳转:
import pandas as pd mid = list(pd.read_excel('./node_xlsx.xlsx', header=None)) print(mid)
输出如下:
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)
生成文件内容效果如下:
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)
生成文件内容效果如下:
.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)
生成文件无法直接打开,这里与加载一起写在代码里了,输出效果如下:
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)
生成文件无法直接打开,这里与加载一起写在代码里了,输出效果如下:
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()
生成文件内容效果如下:
字典类型数据保存到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)
生成文件内容效果如下:
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文件:
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)
生成文件内容效果如下:
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文件及转换后的源字典:
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()即可。
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)
生成文件无法直接打开,这里与加载一起写在代码里了,输出效果如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)