python基础(数据读写)

数据读写

文件对象声明及基本操作

  • 另一种数据格式:文件/文档
# 本地文件的界定:指向一个本地存储的文件,是一个链接或者一个映射

path1 = 'C:/Users/Hjx/Desktop/text.txt'  # 单个反斜杠:/
path2 = 'C:\\Users\\Hjx\\Desktop\\text.txt'  # 两个斜杠:\\(第一个\是转义符)
path3 = r'C:\Users\Hjx\Desktop\text.txt'  # r用于防止字符转义
# 路径书写格式
print(path1)
print(path2)
print(path3)
# 读取文件:open语句

f = open(path2, 'r')
print(type(f))
print(f)
print(f.read())
print('读取完毕')
# open('路径', '模式', enconding = '编码' )
# 模式:r:读取文件,默认;w:写入;rw:读取+写入;a:追加
# 简答的读取方法:.read() → 读取后,光标将会留在读取末尾

print(f.read()) 
print('读取为空')
# 运行第一次.read()之后,光标位于末尾,再次读取输出为空

f.seek(0)
print(f.read()) 
print('第二次读取')
# 所以现在用 f.seek(0) 来移动光标

f.close()
# print(f.read())   # 关闭后无法读取
# 关闭文件链接  f.close(),养成一个好习惯

系统模块下的路径操作

  • os 模块:提供了非常丰富的方法用来处理文件和目录
# os模块:系统模块 - 常用命令

import os  # 导入模块

print(os.name)  # 输出字符串指示正在使用的平台。如果是window 则用'nt'表示,对Linux/Unix用户,它是'posix'。

print(os.getcwd())  # 函数得到当前工作目录,即当前Python脚本工作的目录路径。

print(os.listdir())  # 返回指定目录下的所有文件和目录名。

#os.chdir('C:\\Users\\Hjx\\Desktop\\' )  # 切换到目标路径
#print(os.getcwd()) 

#os.remove('text2.txt')  # 删除一个文件

print(os.path.split('C:\\Users\\Hjx\\Desktop\\text.txt'))  # 函数返回一个路径的目录名和文件名

print(os.path.exists('C:\\Users\\Hjx\\Desktop\\heheh.txt'))
print(os.path.exists('C:\\Users\\Hjx\\Desktop\\'))
# 用来检验给出的路径是否真地存在,这里不存在改文件故False,但路径存在故True
# 相对路径和绝对路径

os.chdir('C:\\Users\\Hjx\\Desktop\\' )
f2 = open('text.txt','r')
print(f2.read())
# 在申明了目录之后,就可以直接输出文件名了 → 相对路径

文件的读取与写入

  • os 模块:提供了非常丰富的方法用来处理文件和目录
# 文件读取 - read

f = open('C:\\Users\\Hjx\\Desktop\\text.txt', 'r')
print(f.read())
# 直接读取(这里光标默认会在最末尾)
f.seek(0)
print(f.read(2))
# f.read(n):n代表读取多少个字符
f.seek(0)
print(f.readline())
print(f.readline())
print(f.readline(4))
# 读取行到字符串,一次性读取一行
# f.readline(n):读取该行的前n个字符
f.seek(0)
for line in f.readlines():
    print(type(line),line)
# 遍历一个文件:for语句+f.readlines()
小作业

利用百度POI小插件爬取一些poi数据,然后存成txt,再用python读取,编写成一个json形式(列表字典):

[{'name':'...', 'lng':..., 'lat':..., 'address':'...'},{...},...,]
# 答案代码

path = 'C:\\Users\\Hjx\\Desktop\\jiuba.txt'  # 创建路径变量
f = open(path,'r')  # 读取txt文件
m = []  # 新建一个空列表,用于存储数据
n = 0

for line in f.readlines():
    n += 1
    st1 = line.split(':')
    name = st1[0]   # 先以:拆分,筛选出name文本
    information = st1[1]  # 第二部分包括lng,lat,address
    st2 = information.split(',')
    lng = float(st2[0])  # 筛选出lng
    lat = float(st2[1])  # 筛选出lat
    ad = st2[2].strip()  # 筛选出address,去除末尾空格
    data = [['name',name],['lng',lng],['lat',lat],['address',ad]]  # 做成嵌套列表
    m.append(dict(data))  # 生成字典,并追加如列表m
    #print('成功转换%i个数据'%n)

print(m)
print('\n数据转换完成!总共转换%i个数据'%n)
# 文件写入 - write

path =  'C:\\Users\\Hjx\\Desktop\\test_write.txt' 
f = open(path, 'w', encoding = 'utf8')
f.write('hello world!')
# 执行后直接创建“test_write.txt”文件,并写入“hello world!”
# 12代表输入了12个字符,但是文件内真的有写入吗?打开看看
f.close()
# 为什么没有?因为刚才是在内存里运行,我们需要再加上close才能写入
path =  'C:\\Users\\Hjx\\Desktop\\' 
f = open(path + 'test_write2.txt', 'w', encoding = 'utf8')
lst = ['a','b','c','d','e']
f.writelines(lst)
f.close()
# f.writelines(list):依次把列表元素写入,但这里有没有提行?
# 如果想每一个元素提行怎么办? → 每个元素后都有"\n"
path =  'C:\\Users\\Hjx\\Desktop\\' 
f = open(path + 'test_write2.txt', 'w', encoding = 'utf8')
lst = ['a','b','c','d','e']

for i in range(len(lst)):
    lst[i] = lst[i] + '\n'
    
f.writelines(lst)
f.close()
# 通过遍历给每个元素最后加上"\n"
小作业
两个列表[1~10],[a~j],写入一个txt,变成以下格式
1,a
2,b
3,c
...
# 答案代码

n = list(range(1,11))
v = ['a','b','c','d','e','f','g','h','i','j']

f = open( 'C:\\Users\\Hjx\\Desktop\\test_write3.txt', 'w', encoding = 'utf8')
m = []

for i in range(len(n)):
    f.writelines([str(n[i]),',',v[i] + '\n'])

f.close()
print('finished!')

pickle模块的运用

  • pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。
  • python的pickle模块实现了基本的数据序列和反序列化
  • 通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储
  • 通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
  • pickle.dump() / pickle.load()
# 存储:pickle.dump(obj, file, [,protocol])

import pickle

data = {'a':[1,2,3,4], 'b':('string','abc'), 'c':'hello'}
print(data)
# 创建一个字典变量data

pic = open( 'C:\\Users\\Hjx\\Desktop\\data.pkl', 'wb')
# 以二进制来存储:rb, wb, wrb, ab

pickle.dump(data,pic)
pic.close()
# 将一个字典数据存成了pkl文件
# 读取:pickle.load(file)

f = open( 'C:\\Users\\Hjx\\Desktop\\data.pkl', 'rb')

st = pickle.load(f)
print(st)
# 直接读取pkl文件内的数据,该数据为一个字典
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值