文件操作---python

文件

存储在计算机的存储设备(磁盘)中的一组数据序列就是文件

流程:打开文件 操作文件 关闭文件

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}]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值