python进阶·文件操作序列化正则表达式

文件操作

打开文件

# open 函数 用于文件的操作
file = open('ppp.txt','r',encoding='utf-8-sig') #打开文件
print(file.read()) #读取文件内容
file.close() # 关闭文件
# 不用了之后一定要关闭,释放在内存的空间
with open('ppp.txt','r',encoding='utf-8-sig') as file:
    print(file.read())

文件路径

文件的路径分为相对路径和绝对路径两种。

  • 绝对路径:指的是绝对位置,完整地描述了目标的所在地,所有目录层级关系是一目了然的。
  • 相对路径:是从当前文件所在的文件夹开始的路径。

访问模式

在这里插入图片描述

# r 只读
# w 写
# b 二进制
# t 文本形式打开
# rb 以二进制读取
# rw 以二进制写入 (图片,视频,音频用二进制操作)
# a append 追加
# r+ 可读写
# w+ 可读写

读写

with open('ppp.txt','r',encoding='utf-8') as fp:
    while True:
        content = fp.readline()
        print(content)
        if content ==  '' :
            break
with open('qqq.txt','w',encoding='utf-8') as fp:
    fp.write('哈哈哈哈哈哈')

复制一个视频

new = open('abc.mp4','wb')
old = open('qq48.mp4','rb')
while True:
    content = old.read(1024)
    new.write(content)
    if not content:
        break
new.close()
old.close()

读写csv文件

import csv
#读取csv
with open('stock.csv','r') as fp:
    reader = csv.reader(fp) #<class '_csv.reader'>
    title = next(reader) #获取表头
    #print(type(reader))
    for x in reader:
        print(x)
#print(title)

读取后转化成字典,并选择性输出:

import csv
with open('stock.csv','r') as fp:
    reader = csv.DictReader(fp) #<class '_csv.reader'>
    for x in reader:
        print(x)
    #print(reader)
        value = {'name':x['secShortName'],'Vol':x['turnoverVol']}
        print(value)  #其一:{'name': '凌云B股', 'Vol': '215900'}

csv写入:

import csv
def write_csv():
    headers = ['username','age','height']
    values = [
        ('zhangsan',18,'175cm'),
        ('lisi',19,'178cm'),
        ('wangwu',20,'185cm'),
        ('zhaoliu',22,'165cm'),
    ]
    with open('znmd_student.csv','w',encoding='utf-8',newline='') as fp:
        write = csv.writer(fp)
        write.writerow(headers)
        write.writerows(values)

if __name__ == '__main__':
    # 下面代码只在当前文件写入.py中运行
    # 其他文件调用无效
    write_csv()

在这里插入图片描述

import csv
def write_csv_demo2():
    headers = ['username','age','height']
    values = [
        {"username":'张三','age':18,'height':'181cm'},
        {"username":'李四','age':19,'height':'183cm'},
        {"username":'王五','age':20,'height':'185cm'},
    ]
    with open('znmd_class02.csv','w',encoding='utf-8-sig',newline='') as fp:
        writer = csv.DictWriter(fp,headers)
        writer.writeheader()
        writer.writerows(values)

if __name__ == '__main__':
    #下面的代码只在 12csv文件写入.py中运行
    # 别的文件除非导入 之后调用 否则不运行
    write_csv_demo2()

在这里插入图片描述

搜索引擎(插入)

bing.com 网址

“python” # 双引号 屏蔽广告
机器学习 filetype:pdf #指定类型
python site:bilibili.com #指定网站

json

http://apis.juhe.cn/simpleWeather/query?city=%E5%AE%9C%E6%98%8C&key=381c1a16a2ae73e7f72e8618ae21ee82
在这里插入图片描述
字典直接写入文件会报错:

person = {
    'username':'shizu',
    'age':18,
    'height':'191cm'
}
# json
# 本质上是字符串
with open('kangbazi.txt','w',encoding='utf-8') as fp:
    fp.write(person)
#write() argument must be str, not dict

需转成json(python字典转json):

import json #文件只能写入 字符串或二进制
person = {
    'username':'shizu',
    'age':18,
    'height':'191cm'
}
# json
# 本质上是字符串
with open('kangbazi.txt','w',encoding='utf-8') as fp:
    fp.write(json.dumps(person,ensure_ascii=False))  #ensure_ascii=False中文不转Ascii码
#{"username": "shizu", "age": 18, "height": "191cm"}
#json  键 全部是双引号 如果值是字符串 也是双引号括起来

json转python字典:

#json转python字典
data = json.dumps(person,ensure_ascii=False)
res = json.loads(data,encoding='utf-8')
print(res)

天气实例:

data = '{"reason":"查询成功!","result":{"city":"宜昌","realtime":{"temperature":"30","humidity":"79","info":"多云","wid":"01","direct":"东北风","power":"2级","aqi":"39"},"future":[{"date":"2021-07-10","temperature":"25\/30℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"东南风"},{"date":"2021-07-11","temperature":"25\/32℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"南风转东南风"},{"date":"2021-07-12","temperature":"23\/27℃","weather":"大雨转小雨","wid":{"day":"09","night":"07"},"direct":"东南风转东风"},{"date":"2021-07-13","temperature":"23\/28℃","weather":"小雨","wid":{"day":"07","night":"07"},"direct":"南风转东风"},{"date":"2021-07-14","temperature":"25\/34℃","weather":"小雨转多云","wid":{"day":"07","night":"01"},"direct":"东南风转东北风"}]},"error_code":0}'
# data = {
#     "reason": "查询成功!",
#     "result": {
#         "city": "宜昌",
#         "realtime": {
#             "temperature": "30",
#             "humidity": "79",
#             "info": "多云",
#             "wid": "01",
#             "direct": "东北风",
#             "power": "2级",
#             "aqi": "39"
#         },
#         "future": [
#             {
#                 "date": "2021-07-10",
#                 "temperature": "25/30℃",
#                 "weather": "多云",
#                 "wid": {
#                     "day": "01",
#                     "night": "01"
#                 },
#                 "direct": "东南风"
#             },
#             {
#                 "date": "2021-07-11",
#                 "temperature": "25/32℃",
#                 "weather": "多云",
#                 "wid": {
#                     "day": "01",
#                     "night": "01"
#                 },
#                 "direct": "南风转东南风"
#             },
#             {
#                 "date": "2021-07-12",
#                 "temperature": "23/27℃",
#                 "weather": "大雨转小雨",
#                 "wid": {
#                     "day": "09",
#                     "night": "07"
#                 },
#                 "direct": "东南风转东风"
#             },
#             {
#                 "date": "2021-07-13",
#                 "temperature": "23/28℃",
#                 "weather": "小雨",
#                 "wid": {
#                     "day": "07",
#                     "night": "07"
#                 },
#                 "direct": "南风转东风"
#             },
#             {
#                 "date": "2021-07-14",
#                 "temperature": "25/34℃",
#                 "weather": "小雨转多云",
#                 "wid": {
#                     "day": "07",
#                     "night": "01"
#                 },
#                 "direct": "东南风转东北风"
#             }
#         ]
#     },
#     "error_code": 0
# }

res = json.loads(data,encoding='utf-8')
print(res)
city = res['result']['city']
weathers = res['result']['future']
print(city)
#for weather in weathers:
#    for key,value in weather.items():
#        print(key,':',value)
#    print(weather)



for index,weather in enumerate(weathers):# 列表的每个元素是字典
    date = weather['date']
    temperature = weather['temperature']
    weather1 = weather['weather']
    direct = weather['direct']
    print(f'周{index+1}',date,temperature,weather1,direct)

# 周1 2021-07-10 25/30℃ 多云 东南风
# 周2 2021-07-11 25/32℃ 多云 南风转东南风
# 周3 2021-07-12 23/27℃ 大雨转小雨 东南风转东风
# 周4 2021-07-13 23/28℃ 小雨 南风转东风
# 周5 2021-07-14 25/34℃ 小雨转多云 东南风转东北风

正则表达式

# 处理字符串的
# 对字符串查找和替换
import re
text = '愿你与我立黄昏,愿你问我粥可温'
ret = '粥'
res = re.search(ret,text)
print(res.group()) #粥

手机号检验:

import re
text = input('请输入您的手机号:')
res = '1[3456789]\d{9}'
ret = re.match(res,text)
print(ret.group())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值