文件对象
文件读写是基于文件对象的,因此读写文件首先是要得到文件对象。利用内置函数open()可以返回要访问的文件对象,另外还有一些函数也会返回文件对象或类文件对象。
open()函数的语法:file_object = open(file_name,access_mode,encoding=None)
其中,file_name是要访问的文件名字符串(包括路径),access_mode是文件访问模式,encoding是解码或编码使用的字符编码。
# 查看平台当前字符编码
print(locale.getpreferredencoding()) # 打印出来的结果为:cp936,即GBK编码
文件对象的主要访问模式:
文件对象的读写方法:
1.文本文件的读写
文本文件中的所有数据都以字符形式进行存储,最简单的文本文件读写就是按照文件的字符编码对文件中字符进行编码和解码。
在写文件时,只能是字符串或者字符串组成的序列,如要写入数值数据则需要先使用str()函数将其转换为字符串。
写文件:
# 将列表中的信息写入一个txt文件
out_file = open("D:/tmp/cities.txt", "w")
seq = ["1,北京,116.37,39.92\n", "2,上海,121.53,31.26\n",
"3,广州,113.25,23.13"]
out_file.writelines(seq)
out_file.close()
创建的文本文件如下所示:
读文件:
# 读取写入到文本文件中的信息
input_file = open("D:/tmp/cities.txt", "r")
city_list = input_file.readlines()
for line in city_list:
city_1 = line.strip("\n")
ID, name, lon, lat = city_1.split(",")
print("地名:%s,经度:%.2f,纬度:%.2f" % (name, float(lon), float(lat))) # 格式化输出,因为读取文本文件所得到的值都是字符串,所以用float()函数将其转换成数字型
input_file.close()
输出结果如下图:
2.JSON文件的读写
JSON(JavaScript object notation)文件也是文本文件,但其是以特定的标记组织和表示数据。
在JSON文件中,数据可以是数字、字符串(用双引号表)、逻辑值(True或False)、数组(用方括号)、对象(用花括号),以及null。
Python标准库中的json模块用于对JSON文件进行读写。
把值写入到文件的函数是:json.dump(value,file_obj)
读取文件值的函数是:json.load(file_obj)
写文件:
# 写JSON文件
import json
value = {'北京': {'coord': {'lon': 116.37, 'lat': 39.92}, 'pop': 21707000},
'上海': {'coord': {'lon': 121.53, 'lat': 31.26}, 'pop': 24183300},
'广州': {'coord': {'lon': 113.25, 'lat': 23.13}, 'pop': 14498400}}
f = open("D:/tmp/value.json", "w")
json.dump(value, f)
f.close()
读文件:
# 读JSON文件
import json
f = open("D:/tmp/value.json", "r")
value = json.load(f)
for city_name in value:
print("%s 经度:%.2f,纬度:%.2f,人口:%d"
% (city_name, value[city_name]["coord"]["lon"], value[city_name]["coord"]["lat"], value[city_name]['pop']))
f.close()
格式化输出结果:
3.Excel文件的读写
python中有很多包用于Excel文件(包括xls文件和xlsx文件)读写,其中,xlrd和xlwt包分别用于xls文件的读和写。具体使用如下:
创建Excel文件:
# 写Excel文件
import xlwt
book = xlwt.Workbook() # 实例化一个Workbook对象
sheet1 = book.add_sheet("cities") # 增加一个新的工作表
row0 = sheet1.row(0) # 返回工作表中的第1行
row0.write(0, "城市") # 在第1列写入元素值"城市"
row0.write(1, "经度")
row0.write(2, "纬度")
cities = [["北京", 116.37, 39.92], ["上海", 121.53, 31.26], ["广州", 113.25, 23.13]]
i = 0
# 通过循环将列表数据写入excel表内
for city in cities:
i = i + 1
row = sheet1.row(i)
j = 0
for info in city:
row.write(j, info)
j = j + 1
book.save("D:/tmp/cities.xls")
创建的Excel文件如下所示:
读取Excel文件:
# 读Excel文件
import xlrd
book = xlrd.open_workbook("D:/tmp/cities.xls") # 找到并打开Excel文件,返回一个Workbook对象(工作簿)
sheet_list = book.sheets() # 返回一个列表,列表中的元素对应每个工作表(sheet)
sheet = sheet_list[0] # 通过列表索引得到第一个工作表(sheet对象)
for i in range(0, 4):
print(sheet.cell_value(i, 0), sheet.cell_value(i, 1), sheet.cell_value(i, 2))
内容输出如下图:
文件系统和路径操作
python中的文件系统操作大多通过os模块来实现,os中的子模块path提供路径操作函数。os模块说明文档官网
'''
os模块中的常用函数
getcwd() 返回当前目录的路径字符串
listdir(path) 返回指定目录的所有文件名的列表
rename(src,dest) 把名为src的文件改名为dest
mkdir(path,mode) 创建名为path,权限模式为mode的目录
rmdir(path) 身材名为path的目录
chdir(path) 改变当前工作目录为path
'''
Python中的__file __全局变量可以返回当前py文件的完整文件名(包括路径)
Python3.x
新增一个pathlib模块,把路径作为对象,能更好操作路径,使得路径对象可以作为路径和文件名字符串(或文件夹字符串)可以直接连接。
import os
from pathlib import Path
path = Path(os.path.dirname(__file__))
filename = path / "test.txt"