文件
存储在计算机的存储设备(磁盘)中的一组数据序列就是文件
流程:打开文件 操作文件 关闭文件
f = open(“data.txt”,r)
f.writable() / f.readable()
f.close()
为了避免遗漏close ,使用以下代码,若结束或有异常,自动调用close
with open(r '文件路径',mode:文件操作模式) as f:
文件具体操作代码
只用于读取 txt . csv 等文本文件,像 word 等第三方文件需专门的库
#this is database config file(app.config.txt)
db_file = 196.123.47.21
db_port = 1521
db_user = admin
db_pass = password
configData = {}
with open ('app.config.txt','r') as f:
datas = f.readlines()
#['#this is database config file\n', 'db_file = 196.123.47.21\n', 'db_port = 1521\n', 'db_user = admin\n', 'db_pass = password\n']
for line in datas:
if line.startswith ("#"):
continue
# print(type(line))
# <class 'str'>
key = line.split("=")[0]
value = line.split("=")[1].replace ("\n","*")
configData[key]= value
if __name__=='__main__':
print(configData)
权限
r 只读,文件必须事先存在(默认)
w 覆盖写,打开已存在的,会立即清空以前内容,不存在,则创建
a 追加写
文件位置:相对路径 绝对路径
r’d:\data.txt’ 或 ‘d:/data.txt’ 或 ‘d:\data.txt’
方法读:
f.read ()一次性读,统一处理
f.read (100)读取size个字符或字节
f.readline()读取一行内容,若有数字,读取该行的n个字符
f.readlines () 按行读取全部内容,返回值是列表类型,一次读入,分行处理
需要获取单独行,用遍历[‘…\n’,‘…\n’,…]
for line in f :直接通过一个循环来读取文件,返回的是字符串类型
读取或写入中文格式(…, encoding =’ utf-8’),默认是gbk
f.seek(6) 修改文件指针,从第几个位置开始读 ,英文占一个字节,中文gbk占两个字节,uttf-8占三个字节
写方法:
f.write() 默认不换行显示所有内容
f.write(写入字符串+‘\n’)则可以换行显示
f.writelines ( ) 写大量内容 (形式为字符串)
with open('data_write.txt','a',encoding='utf-8') as f:
datas = ['hello python','人生苦短']
f.writelines([data for data in datas])
#hello python人生苦短
f.writelines([data+'\n' for data in datas])
f.writelines('\n'.join(datas))
#hello python
#人生苦短
例子:编写一个函数,接受用户指定文件名和要查找内容作的参数),该取这个文件,并将该文件的每一行输出
def readfile(path, target):
with open(r'path', encoding ='utf-8') as f:
for line in f:
if target in line:
print(line)
readfile('zen.txt','ugly')
设计多个文件操作时:先打开的后关,后打开的先关
数据的组织维度及存储
一维数据:列表、元组、集合
二维数据:也称为表格数据,由行、列组成
高维数据:使用key-value方式进行组织,字典,json格式
'''
str.split(str = " ")以 str 为分隔符拆分字符串,返回拆分后的引表
',‘. join ([' a ',' b ',' c '])以指定符号连接后面列表中的字符串值,以字符串形式返回
'''
def write_table():
lst = [
['商品名称','单价','采购数量'],
['水杯','98.5','20'],
['鼠标','89','100']
]
with open('table.csv','w',encoding='UTF-8') as f:
for item in lst:
print(item)
line = ','.join(item)
print(line)
f.write(line)
f.write('\n')
'''
['商品名称', '单价', '采购数量']
商品名称,单价,采购数量
['水杯', '98.5', '20']
水杯,98.5,20
['鼠标', '89', '100']
鼠标,89,100
'''
def read_table():
data=[]
with open('table.csv', 'r', encoding='UTF-8') as f:
lst = f.readlines() #每一行是列表中的一个元素
print(lst,type(lst))
for item in lst: #item是字符串类型
new_lst = item[:len(item)-1].split(',')#结果是列表
data.append(new_lst)
print(data)
'''
['商品名称,单价,采购数量\n', '水杯,98.5,20\n', '鼠标,89,100\n'] <class 'list'>
[['商品名称', '单价', '采购数量'], ['水杯', '98.5', '20'], ['鼠标', '89', '100']]
'''
write_table()
read_table()
高维数据
import json
#准备高维数据
lst = [
{'name':'小红','age':18,'score':90},
{'name':'小猴','age':28,'score':95},
{'name':'小明','age':20,'score':100}
]
s = json.dump(lst,ensure_ascii=False,indent=4)
#ensure_ascii正常显示中文
print(type(s))
print(s) #编码,list-->str,列表中是字典
#解码
lst2=json.load(s)
print(type(lst2))
print(lst2)
<class 'str'>
[
{
'name':'小红',
'age':18,
'score':90
},
{
'name':'小猴',
'age':28,
'score':95
},
{
'name':'小明',
'age':20,
'score':100
}
]
<class 'list'>
[ {'name':'小红','age':18,'score':90},{'name':'小猴','age':28,'score':95},{'name':'小明','age':20,'score':100}]