Python基础-文件、模块、pickle、weather forecast

读写文件:

 

 

f = open('E:\\abc.txt')
print(f)  #输出:<_io.TextIOWrapper name='E:\\abc.txt' mode='r' encoding='cp936'>

 f.close()    使用完文件最好要关闭

读:

f = open('E:\\abc.txt')
print(f.read())  #输出文件里的内容:
                      # 你好呀!
                     # 好好学习!!
                    # 天天向上!!!
f = open('E:\\abc.txt')
print(f.read(5))  #输出结果:输出前5个字符

print(f.tell()) #输出当前的位置  :10

写:

f = open('E:\\text.txt','w')  #打开/新建
f.write('I Love Python')

将一段对话,按照‘=======================’分成n段,将每段内容按照甲乙分类保存:

f = open('E:\\talk.txt')

jia = []  #甲
yi = []  #乙
count = 1

for each_line in f:
    if each_line[:6] != '======':
        (role,line_spoken) = each_line.split(':') #用‘ :’将字符串分割一次,前部分存到role,后部分叫line_spoken
        if role == '甲':
            jia.append(line_spoken)
        if role == '乙':
            yi.append(line_spoken)
    else:
        file_name_jia = 'jia'+ str(count)+ '.txt'  #将文件命名
        file_name_yi  = 'yi' + str(count)+ '.txt'  #将文件命名

        jia_file = open(file_name_jia,'w')
        yi_file  = open(file_name_yi,'w')

        jia_file.writelines(jia)  #将list中的值存入文件
        yi_file.writelines(yi)    #同上

        jia = []
        yi = []
        count += 1

#因为最后一段没有=======,所以要单独处理
file_name_jia = 'jia'+str(count)+'.txt'  #将文件命名
file_name_yi  = 'yi' +str(count)+'.txt'  #将文件命名

jia_file = open(file_name_jia,'w')
yi_file  = open(file_name_yi,'w')

jia_file.writelines(jia)  #将list中的值存入文件
yi_file.writelines(yi)    #同上

#将文件close
jia_file.close()
yi_file.close()
f.close()

生成的文件(在程序的存储位置):

由于上面代码有些冗杂,下面进行优化:

def save_file(jia,yi,count):
    file_name_jia = 'jia'+str(count)+'.txt'  #将文件命名
    file_name_yi  = 'yi' +str(count)+'.txt'  #将文件命名

    jia_file = open(file_name_jia,'w')
    yi_file  = open(file_name_yi,'w')

    jia_file.writelines(jia)  #将list中的值存入文件
    yi_file.writelines(yi)    #同上

    jia_file.close()
    yi_file.close()

def split_file(file_name):
    f = open(file_name)

    jia = []  #甲
    yi = []  #乙
    count = 1

    for each_line in f:
        if each_line[:6] != '======':
            (role,line_spoken) = each_line.split(':') #用‘ :’将字符串分割一次,前部分存到role,后部分叫line_spoken
            if role == '甲':
                jia.append(line_spoken)
            if role == '乙':
                yi.append(line_spoken)
        else:
            save_file(jia,yi,count)

            jia = []
            yi = []
            count += 1

    #因为最后一段没有=======,所以要单独处理
    save_file(jia,yi,count)
    f.close()

#调用上面的函数:
split_file('E:\\talk.txt')

模块:可用代码块的打包,用import 引入

OS模块:

#简单举例
import os
print(os.getcwd()) #返回放弃的工作目录

os.path模块:

pickle(泡菜技术):

将对象转换为字符串很简单,但是将字符串转换为对象就很难,比如将列表转为字符串容易,将字符串转为列表难,所以可与i采用pickle,将内容转换为二进制保存,需要使用时再进行转换

import pickle
my_list = [123,3.14,'abc',['fdsf']]
pickle_file = open('my_list.pkl','wb')  #前面的后缀是无所谓什么名字的,写入方式设置为二进制形式写入
pickle.dump(my_list,pickle_file)  #将my_list写入pickle_file
pickle_file.close()

pickle_file = open('my_list.pkl','rb')  #二进制读
my_list2 = pickle.load(pickle_file)  #加载pickle_file
print(my_list2)  #输出:[123, 3.14, 'abc', ['fdsf']]

天气预报:

import urllib.request
import gzip
import json
import pickle
print('------天气查询------')
def get_weather_data() :
    city_name = input('请输入要查询的城市名称:')
    url1 = 'http://wthrcdn.etouch.cn/weather_mini?city='+urllib.parse.quote(city_name)
    url2 = 'http://wthrcdn.etouch.cn/weather_mini?citykey=101010100'
    #网址1只需要输入城市名,网址2需要输入城市代码
    #print(url1)
    weather_data = urllib.request.urlopen(url1).read()
    #读取网页数据
    weather_data = gzip.decompress(weather_data).decode('utf-8')
    #解压网页数据
    weather_dict = json.loads(weather_data)
    #将json数据转换为dict数据
    return weather_dict

def print_info(num,forecast):
    print('风向:',forecast[num].get('fengxiang'))
    print('风级:',forecast[num].get('fengli'))
    print('高温:',forecast[num].get('high'))
    print('低温:',forecast[num].get('low'))
    print('天气:',forecast[num].get('type'))
    print('日期:',forecast[num].get('date'))

def show_weather(weather_data):
    weather_dict = weather_data
    #将json数据转换为dict数据
    if weather_dict.get('desc') == 'invilad-citykey':
        print('你输入的城市名有误,或者天气中心未收录你所在城市')
    elif weather_dict.get('desc') =='OK':
        forecast = weather_dict.get('data').get('forecast')
        print('城市:',weather_dict.get('data').get('city'))
        print('温度:',weather_dict.get('data').get('wendu')+'℃ ')
        print('感冒:',weather_dict.get('data').get('ganmao'))
        print_info(0,forecast)
        print('*******************************')
        four_day_forecast =input('是否要显示未来四天天气,是/否:')
        if four_day_forecast == '是' or 'Y' or 'y':
            for i in range(1,5):
                print_info(i,forecast)
                print('--------------------------')
    print('***********************************')

show_weather(get_weather_data())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值