存储在计算机中的一组数据叫做文件
gbk——编码格式,每个中文占2个字节,utf—8——每个中文占3个字节
打开文件,如果没有此文件,便会创建一个。
def my_write():
file=open('a.txt','w',encoding='utf-8')
#操作文件
file.write('伟大的中国梦')
#关闭
file.close()
#读取
def my_read():
file=open('a.txt','r',encoding='utf-8')
s=file.read()
print(type(s),s)
file.close()
if __name__=='__main__':
# my_write()#调用函数
my_read()
# <class 'str'> 伟大的中国梦
文件在磁盘上未被打开的状态叫存储状态,打开的叫占用状态,关闭文件又恢复到存储状态。
将文字写入文本并换行:
def my_write(s):
file=open('a.txt','a',encoding='utf-8')
file.write(s)
file.write('\n')
file.close()
#把列表放进去
def my_write_list(file,lst):
f=open(file,'a',encoding='utf-8')
f.writelines(lst)
f.close()
if __name__=='__main__':
# my_write('北京欢迎你')
# my_write('xxxxx')
lst=['姓名\t','年龄\t','成绩\n','张三\t','30\t','98']
my_write_list('a.txt',lst)
结果:
伟大的中国梦北京欢迎你
北京欢迎你
xxxxx
姓名 年龄 成绩
张三 30 98
def my_read(filename):
file=open(filename,'w+',encoding='utf-8')
file.write('你好啊')#写入完成,文件指针在最后
#seek 修改文件指针位置
file.seek(0)
#读取
# s=file.read()#读取全部
# s=file.read(2)#只读取两个字符
# s=file.readline()#读取一行中的两个字符
# s=file.readline(2)#读取一行中的两个字符
# s=file.readlines()#读取所有,一行为列表中的一个元素,s是列表类型
file.seek(3)#读取’好啊‘,utf-8,一个中文,三个字节
s=file.read()
print(type(s),s)
file.close()
if __name__=='__main__':
my_read('b.txt')
异常处理应用于所有问题,with语句专门用于关闭文件。
def write_fun():
with open('a.txt','w',encoding='utf-8') as file:
file.write('2022北京欢迎你')
def read_fun():
with open('a.txt','r',encoding='utf-8') as file:
print(file.read())
def copy(src_file,target_file):
with open(src_file,'r',encoding='utf-8') as file:
with open(target_file,'w',encoding='utf-8') as file2:
file2.write(file.read())#将读取的内容直接写进文件
if __name__=='__main__':
write_fun()
read_fun()
copy('./a.txt','./b.txt')
#存储和读取一维数组
def my_write():
#一维数组,可以使用列表,元组,或集合
lst=['张三','李四','王五']
with open('student.csv','w') as file:
file.write(','.join(lst))#将列表转位字符串
def my_read():
with open('student.csv','r') as file:
s=file.read()
lst=s.split(',')
print(lst)
#存储和读取二维数据
def my_write_table():
lst=[
['商品名称','单价','采购数量'],
['水杯','10','30'],
['帽子','30','100']
]
with open('table.csv','w',encoding='utf-8') as file:
for item in lst:#item的数据类型是列表
line=','.join(item)
file.write(line)
file.write('\n')
# # #读取
def my_read_table():
data=[]#读取存储的数据
with open('table.csv','r',encoding='utf-8') as file:
lst=file.readlines()
# print(type(lst),lst)#二维数据不能用一维列表读取
for item in lst:#item是字符串类型
new_lst=item[:len(item)-1].split(',')#结果位列表
data.append(new_lst)
# print(type(lst),lst)
print(data)
if __name__=='__main__':
# my_write()
# my_read()
# my_write_table()
my_read_table()
import json
lst=[
{'name':'早春','age':18,'score':90},
{'name':'剩夏','age':21,'score':99},
{'name':'暖冬','age':19,'score':89}
]
s=json.dumps(lst,ensure_ascii=False,indent=4)
print(type(s)) #?? list-->str,??????
print(s)
#解码
lst2=json.loads(s)
print(type(lst2))
print(lst2)
#编码到文件中
with open('student.txt','w') as file:
json.dump(lst,file,ensure_ascii=False,indent=4)
#解码到程序
with open('student.txt','r') as file:
lst3=json.load(file)#不用进行类型转换,直接是列表类型
print(type(lst3))
print(lst3)
ensure_ascii=False
: 设置为 False
以确保在处理包含中文字符的数据时,输出为原始字符而不是 Unicode 转义序列。
在打开文件进行写入和读取时,使用 encoding='utf-8'
以支持中文字符。
在 Python 文件中包含非 UTF-8 编码的字符,但没有在文件顶部指定编码声明。在包含中文或其他非 ASCII 字符的 Python 脚本中,最好在文件的开头声明编码,以确保 Python 解释器正确处理文件中的字符。
# -*- coding: utf-8 -*-
import json
# 定义包含中文字符的列表
lst = [
{'name': '张三', 'age': 18, 'score': 90},
{'name': '李四', 'age': 21, 'score': 99},
{'name': '王五', 'age': 19, 'score': 89}
]
# 将列表转换为 JSON 字符串,确保中文字符正常显示
s = json.dumps(lst, ensure_ascii=False, indent=4)
print(type(s)) # 输出 <class 'str'>
print(s)
# 将 JSON 字符串转换回 Python 列表对象
lst2 = json.loads(s)
print(type(lst2)) # 输出 <class 'list'>
print(lst2)
# 将 Python 对象写入文件,保存为 JSON 格式
with open('new.txt', 'w', encoding='utf-8') as file:
json.dump(lst, file, ensure_ascii=False, indent=4)
# 从文件中读取 JSON 格式数据并转换为 Python 对象
with open('new.txt', 'r', encoding='utf-8') as file:
lst3 = json.load(file) # 从文件中加载 JSON 数据并转换为 Python 对象
print(type(lst3)) # 输出 <class 'list'>
print(lst3)
import os
print('当前工作路径:',os.getcwd())#当前工作路径: D:\python object
lst=os.listdir()
print('当前路劲下的所有目录及文件:',lst)#当前路劲下的所有目录及文件: ['.idea', 'main.py', 'new.txt', 'text.py']
#print('指定路径下的所有目录及文件:',os.listdir('D:/python object'))
#创建目录
# os.mkdir('好好学习')#如果文件已经存在程序报错
# os.makedirs('./aa/bb/cc')#连续创建三个具有包含关系的文件
#删除目录
# os.remdir('./好好学习')#./表示当前路径FileNotFoundEorror,如果要删除的目录不存在,程序会报错
# os.removeedirs('./aa/bb/cc')#删除多个文件
#改变当前路径
# os.chdir('D:/pythonpro')
# print('当前的工作路径:',os.getcwd())#在写代码,工作路径就是D:/pythonpro
#不改变python文件的路径,只是运行的路径改变
#遍历目录树,相当于递归操作
for dirs,dirlst,filelst in os.walk('d:/python object'):
print(dirs)
print(dirlst)
print(filelst)
print('--------------')
合成代码,不可以直接一起运行会报错,可以分部分运行
import os
#删除文件
os.remove('./a.txt') #如果要删除的文件不存在则会直接报错
#重命名
os.rename('./aa.txt','newaa.txt')
#转换时间格式
import time
def date_format(longtime):
s=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(longtime))
return s
#获取文件信息
info=os.stat('./newaa.txt')
print(type(info))
print(info)
print('最近一次访问世间:',date_format(info.st_atime))
print('在Windows操作系统中显示的文件的创建时间:',date_format(info.st_ctime))
print('最后一次修改时间:',date_format(info.st_mtime))
print('文件的大小(单位是字节):',info.st_size)
#自动路径下的文件
os.startfile('calc.exe')#可以大开电脑的计算器
#启动python解释器
os.startfile(r'D:\Pycharm\python.exe')
import os.path
# print('获取目录或文件的绝对路径:',os.path.abspath('./b.txt'))
# print('判断目录或文件在磁盘上是否存在:',os.path.exisists('b.txt'))#相对路径Ture
# print('判断目录或文件在磁盘上是否存在:',os.path.exists('newb.txt'))#False
# print('判断目录或文件在磁盘上是否存在:',os.path.exists('./好好学习'))#False
print('拼接路径:',os.path.join('D:/python object/text.py','b.txt'))
# 拼接路径: D:/python object/text.py\b.txt
print('分隔文件的名和文件后缀名:',os.path.splitext('b.txt'))#元组类型
print('提前文件名:',os.path.basename(r'D:\python object\text.py'))#D:\python object
print('判断一个路径是否是有效路径:',os.path.isdir(r'D:\python object\text.py'))#True
print('判断一个路径是否是有效路径:',os.path.isdir(r'D:\python object\there.py'))#False
print('判断一个路径是否是有效文件:',os.path.isfile(r'D:\python object\text.py'))#True
#即判断这个文件是否在文件夹里存在