读写文件:
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())