前言
最近再處理數(shù)據(jù)的時(shí)候,總會(huì)用到讀寫(xiě)json,csv,xlsx和xls文件代碼
這里就做個(gè)總結(jié)記錄一下
一、讀寫(xiě)json
1.1 讀
## 讀入json文件
### json格式:{'id':'....','instruction':'.......','input':'.....','output':'....'}
def get_json_data(path):
json_file = open(path, 'r', encoding='utf-8')
json_data = []
for line in json_file.readlines():
dic = json.loads(line)
## 單獨(dú)提取每個(gè)字段
id = dic['id']
instruction = dic['instruction']
input_all = dic['input']
output = dic['output']
## 提取整個(gè)字段
json_data.append(dic)
return json_data
擴(kuò)展: json.loads(line)和 json.load(line)
1.2 寫(xiě)
通用寫(xiě)法:
## 寫(xiě)入json文件
with open(path, 'a+', encoding='utf-8') as file:
json.dump(dic, file, ensure_ascii=False) # dic是準(zhǔn)備寫(xiě)入的dict類型
file.write('\n')
1.2.1 list類型寫(xiě)入
import json
my_list = [1, 2, 3, "four", "five"]
# 將list寫(xiě)入JSON文件
with open("my_list.json", "w") as f:
json.dump(my_list, f)
# 如果想再把json文件讀出
with open("my_list.json", "r") as f:
my_list = json.load(f)
print(my_list) # [1, 2, 3, 'four', 'five']'
1.2.2 dict類型寫(xiě)入
import json
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
# 將dict寫(xiě)入JSON文件
with open("my_dict.json", "w") as f:
json.dump(my_dict, f)
注意:json.dump()將Python對(duì)象序列化為JSON格式,并將其寫(xiě)入文件中。
擴(kuò)展:json.dumps()和 json.dump()
二、讀寫(xiě)csv
2.1 讀
import csv
# 讀取CSV文件
with open('input_file.csv', 'r') as input_file:
reader = csv.reader(input_file)
for row in reader:
print(row)
2.2 寫(xiě)
2.2.1 list類型寫(xiě)入
import csv
# 寫(xiě)入CSV文件
with open('output_file.csv', 'w', newline='') as output_file:
writer = csv.writer(output_file)
writer.writerow(['Name', 'Age', 'Gender'])
writer.writerow(['John', '30', 'Male'])
writer.writerow(['Jane', '25', 'Female'])
2.2.2 dict類型寫(xiě)入
import csv
data = [
{'Name': 'John', 'Age': '30', 'Gender': 'Male'},
{'Name': 'Jane', 'Age': '25', 'Gender': 'Female'},
{'Name': 'David', 'Age': '40', 'Gender': 'Male'}
]
# 寫(xiě)入CSV文件
with open('output_file.csv', 'w', newline='') as output_file:
fieldnames = ['Name', 'Age', 'Gender']
writer = csv.DictWriter(output_file, fieldnames=fieldnames)
writer.writeheader()
for row in data:
writer.writerow(row)
注意: 一般csv文件中只包含一個(gè)sheet工作表,所以這里就不舉例含有多個(gè)sheet工作表的csv文件
三、讀寫(xiě)txt
3.1 讀
# 一、按行讀取文本文件
with open('input.txt', 'r') as f:
# 使用 readline() 方法讀取一行數(shù)據(jù)
line = f.readline()
while line:
print(line.strip()) # 去除行末的換行符
line = f.readline()
# 二、使用 readlines() 方法讀取所有行數(shù)據(jù)
with open('input.txt', 'r') as f:
lines = f.readlines()
for line in lines:
print(line.strip()) # 去除行末的換行符
3.2 寫(xiě)
按行寫(xiě)入(手動(dòng)添加換行符\n)
with open('output.txt', 'w') as f:
# 使用 write() 方法寫(xiě)入一行數(shù)據(jù)
f.write('Hello, world!\n')
# 使用 writelines() 方法寫(xiě)入多行數(shù)據(jù)
lines = ['This is line 1.\n', 'This is line 2.\n', 'This is line 3.\n']
f.writelines(lines)
按行寫(xiě)入(python添加換行符\n)
python添加換行符的目的是防止使用不同平臺(tái)(Windows/Mac/Linux),換行符編碼不一致出現(xiàn)顯示問(wèn)題
import os
with open('output.txt', 'w') as f:
# 向文件寫(xiě)入多行數(shù)據(jù),并在每行數(shù)據(jù)末尾添加換行符
lines = ['This is line 1.', 'This is line 2.', 'This is line 3.']
f.write(os.linesep.join(lines))
3.2.1 list類型寫(xiě)入
將列表中的每個(gè)字符串寫(xiě)入文件中,每個(gè)字符串占用一行。
# 將 List 類型的數(shù)據(jù)寫(xiě)入文本文件
data = ['apple', 'banana', 'orange', 'grape']
with open('output.txt', 'w') as f:
f.writelines([f'{item}\n' for item in data])
3.2.2 dict類型寫(xiě)入
# 將 Dict 類型的數(shù)據(jù)寫(xiě)入文本文件
data = {'name': 'Alice', 'age': 25, 'gender': 'female'}
with open('output.txt', 'w') as f:
f.writelines([f'{key}: {value}\n' for key, value in data.items()])
四、讀寫(xiě)docx
注意:doc是Microsoft Word 97-2003文檔文件格式。docx是Microsoft Word 2007及更高版本使用的文檔文件格式。這里都使用的是docx后綴名,適不適用doc文件沒(méi)有測(cè)試。
4.1 讀
首先讀取docx文件需要安裝docx庫(kù):pip install python-docx
或者conda install -c conda-forge python-docx
docx文件中有以下內(nèi)容:
import docx
# 打開(kāi)DOCX文件
doc = docx.Document('my_doc.docx')
# 讀取DOCX文件內(nèi)容
for para in doc.paragraphs:
print(para.text)
4.2 寫(xiě)
4.2.1 list類型寫(xiě)入
import docx
my_list = ['apple', 'banana', 'orange']
# 創(chuàng)建一個(gè)新的DOC對(duì)象
doc = docx.Document()
# 將list寫(xiě)入DOCX文件中
for item in my_list:
doc.add_paragraph(item)
# 保存DOCX文件
doc.save('my_list.docx')
4.2.2 dict類型寫(xiě)入
import docx
my_dict = {'apple': 1.0, 'banana': 2.0, 'orange': 3.0}
# 創(chuàng)建一個(gè)新的DOC對(duì)象
doc = docx.Document()
# 將dict寫(xiě)入DOCX文件中
for key, value in my_dict.items():
doc.add_paragraph(f'{key}: {value}')
# 保存DOCX文件
doc.save('my_dict.docx')
五、讀寫(xiě)xlsx
5.1 讀
5.1.1 讀單個(gè)sheet
# 打開(kāi)Excel文件
workbook = xlrd.open_workbook(path)
# 獲取第一個(gè)工作表
sheet = workbook.sheet_by_index(0)
# 按行讀取內(nèi)容
for row in range(sheet.nrows):
row_values = sheet.row_values(row)
print(row_values)
5.1.2 讀多個(gè)sheet
這里以my_file.xlsx為例,文件中有三個(gè)sheet工作表,每個(gè)工作表中都有三行兩列內(nèi)容。對(duì)內(nèi)容進(jìn)行讀取,5.1節(jié)代碼都是沿用my_file.xlsx格式內(nèi)容
import openpyxl
# 打開(kāi)XLSX文件
workbook = openpyxl.load_workbook('my_file.xlsx')
# 遍歷所有工作表
for worksheet in workbook.worksheets:
print(f'工作表名稱:{worksheet.title}')
# 讀取工作表內(nèi)容
for row in worksheet.iter_rows(values_only=True):
for cell in row:
print(cell)
5.1.3 讀指定sheet工作表
如果僅讀取指定sheet工作表及特定某列的內(nèi)容,可以考慮以下代碼
import openpyxl
# 打開(kāi)XLSX文件
workbook = openpyxl.load_workbook('my_file.xlsx')
# 選擇特定工作表
worksheet = workbook['Sheet2']
# 讀取特定單元格
cell_value = worksheet['A2'].value
print(cell_value)
即讀取sheet2工作表的第A列2行內(nèi)容
5.1.4 讀指定sheet中指定行/列內(nèi)容
import openpyxl
# 打開(kāi)XLSX文件
workbook = openpyxl.load_workbook('my_file.xlsx')
# 指定工作表
worksheet = workbook['Sheet2']
# 讀取第1、2行的內(nèi)容
row_values = []
for row in worksheet.iter_rows(min_row=1, max_row=2): # 第一行和第二行內(nèi)容
for cell in row:
row_values.append(cell.value)
print(row_values)
# 讀取第1列的內(nèi)容
col_values = []
for col in worksheet.iter_cols(min_col=1, max_col=1): # 第一列內(nèi)容
for cell in col:
col_values.append(cell.value)
print(col_values)
5.2 寫(xiě)
5.2.1 list類型寫(xiě)入
多sheet工作表寫(xiě)入代碼
import openpyxl
from openpyxl import Workbook
# 創(chuàng)建工作簿對(duì)象
wb = Workbook()
# 創(chuàng)建第一個(gè)工作表并寫(xiě)入數(shù)據(jù)
ws1 = wb.active # 選擇默認(rèn)的工作簿
ws1.title = "List 1"
my_list1 = ['apple', 'banana', 'cherry']
for i in range(len(my_list1)):
ws1.cell(row=i+1, column=1, value=my_list1[i])
# 創(chuàng)建第二個(gè)工作表并寫(xiě)入數(shù)據(jù)
ws2 = wb.create_sheet("List 2")
my_list2 = ['date', 'elderberry', 'fig']
for i in range(len(my_list2)):
ws2.cell(row=i+1, column=1, value=my_list2[i])
# 保存工作簿為Excel文件
wb.save('my_lists.xlsx')
5.2.2 dict類型寫(xiě)入
給出json中包含dict類型的兩條測(cè)試案例:
{"id": "35b868ba72d72db8d4e11ca71e679f26", "instruction": "ac不知深是誰(shuí)?", "input": "ac", "output": "ac不知深是一名程序員", "title": "可以不寫(xiě)"}
{"id": "35b868ba72d72db8d4e11ca71e679f27", "instruction": "蠟筆小新真好看", "input": "蠟筆小新真可愛(ài)", "output": "我也同意這個(gè)觀點(diǎn)", "title": "可以不寫(xiě)"}
想測(cè)試的代碼可以直接把上面兩條復(fù)制,然后保存到my_file.json
中
import json
import openpyxl
from tqdm import tqdm
data = []
# 讀取json文件中dict類型的信息
with open('my_file.json', 'r',encoding='utf-8') as f:
for line in tqdm(f.readlines()):
dic = json.loads(line)
data.append(dic)
# 創(chuàng)建新的XLSX文件
workbook = openpyxl.Workbook()
# 創(chuàng)建新的工作表
worksheet = workbook.active
# 寫(xiě)入表頭
header = list(data[0].keys())
for i in range(len(header)):
worksheet.cell(row=1, column=i+1, value=header[i])
# 寫(xiě)入數(shù)據(jù)
for i in range(len(data)):
row_data = list(data[i].values())
for j in range(len(row_data)):
worksheet.cell(row=i+2, column=j+1, value=row_data[j])
# 保存XLSX文件
workbook.save('my_output.xlsx')
六、讀寫(xiě)xls
注意:xls是Excel 97-2003二進(jìn)制工作簿格式,而xlsx是Excel 2007及更高版本使用的Open XML工作簿格式。
6.1 讀
import openpyxl
# 打開(kāi)Excel文件
workbook = openpyxl.load_workbook('example.xlsx')
# 獲取工作表對(duì)象
worksheet = workbook.active
# 讀取單元格的值
cell = worksheet['A1']
print('cell.value:',cell.value)
# 迭代行和列,讀取單元格的值
print("rows:")
for row in worksheet.iter_rows():
for cell in row:
print(cell.value)
6.2 寫(xiě)
6.2.1 list類型寫(xiě)入
import xlwt
# 創(chuàng)建一個(gè)新的Excel文件
workbook = xlwt.Workbook()
# 創(chuàng)建一個(gè)工作表對(duì)象
worksheet1 = workbook.add_sheet('My Sheet1')
worksheet2 = workbook.add_sheet('My Sheet2')
# 寫(xiě)入列表1的內(nèi)容
my_list1 = ['apple', 'banana', 'cherry']
for i in range(len(my_list1)):
worksheet1.write(i, 0, my_list1[i])
# 寫(xiě)入列表2的內(nèi)容
my_list2 = ['cat', 'dog', 'bird']
for i in range(len(my_list2)):
worksheet2.write(i, 0, my_list2[i])
# 保存Excel文件
workbook.save('my_list.xls')
6.2.2 dict類型寫(xiě)入
這一段代碼可以參考5.2.2的內(nèi)容部分
dict類型同上文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-461300.html
{"id": "35b868ba72d72db8d4e11ca71e679f26", "instruction": "ac不知深是誰(shuí)?", "input": "ac", "output": "ac不知深是一名程序員", "title": "可以不寫(xiě)"}
{"id": "35b868ba72d72db8d4e11ca71e679f27", "instruction": "蠟筆小新真好看", "input": "蠟筆小新真可愛(ài)", "output": "我也同意這個(gè)觀點(diǎn)", "title": "可以不寫(xiě)"}
import json
import openpyxl
from tqdm import tqdm
data = []
# 讀取json文件中dict類型的信息
with open('my_file.json', 'r', encoding='utf-8') as f:
for line in tqdm(f.readlines()):
dic = json.loads(line)
data.append(dic)
# 創(chuàng)建新的XLSX文件
workbook = openpyxl.Workbook()
# 創(chuàng)建新的工作表
worksheet = workbook.active
# 寫(xiě)入表頭
header = list(data[0].keys())
for i in range(len(header)):
worksheet.cell(row=1, column=i + 1, value=header[i])
# 寫(xiě)入數(shù)據(jù)
for i in range(len(data)):
row_data = list(data[i].values())
for j in range(len(row_data)):
worksheet.cell(row=i + 2, column=j + 1, value=row_data[j])
# 保存XLSX文件
# workbook.save('my_output.xlsx') # 5.2.2的版本
workbook.save('my_output.xls') # 把5.2.2的保存后綴改為 .xls
6.2.3 修改原始文件內(nèi)容
在原始文件上進(jìn)行修改文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-461300.html
import xlrd
import xlwt
# 打開(kāi)Excel文件
workbook = xlrd.open_workbook('example.xls')
# 獲取第一個(gè)工作表
worksheet = workbook.sheet_by_index(0)
# 修改第一個(gè)單元格的值
worksheet.cell(0, 0).value = 'New Value' # 這里填寫(xiě)新的值
# 創(chuàng)建一個(gè)新的Excel文件并將修改后的數(shù)據(jù)寫(xiě)入其中
new_workbook = xlwt.Workbook()
new_worksheet = new_workbook.add_sheet('Sheet 1')
for row_index in range(worksheet.nrows):
for col_index in range(worksheet.ncols):
new_worksheet.write(row_index, col_index, worksheet.cell(row_index, col_index).value)
new_workbook.save('new_example.xls')
到了這里,關(guān)于python 讀寫(xiě) json,csv,txt,docx,xlsx,xls文件大全的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!