爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10769|回复: 7

[混合编程] [已收纳]python之文件操作

[复制链接]

新浪微博达人勋

发表于 2019-9-23 10:15:37 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 15195775117 于 2021-1-27 10:02 编辑

文件:
file='C:\Users\Administrator\Desktop\py文件操作\示例.txt'
打开文件,返回值是个文件操作对象:
fileobj=open(file,'a+')
其中,“a+”表示文件打开模式,有以下12个可选:
r、rb、r+、rb+、
w(只写,文本)、wb(只写,二进制)、w+(读写,先清空)、wb+、
a、ab、a+、ab+
r表示读,w表示写,a表示追加写,“+”表示写,
b表示操作的文件是二进制文件,例如图片、音频
r+模式会从文件头开始写入,如果存在原内容会被覆盖
w+模式打开文件时就会清空内容!

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-10-5 19:38:06 | 显示全部楼层
本帖最后由 15195775117 于 2020-12-24 11:08 编辑

读写文件的2种写法:

1、常规写法:

file=open('XX.txt','r')......file.close()

2、with as写法:
with as语句将with后的操作的返回值放到as后面,
该语句结束时就会自动关闭文件
那么该语句后不需要再使用file.close()了
使用with as语句打开文件,即便报错,也不影响文件关闭,
即,file变量会释放内存
即,该语句之后如果需要操作该文件,需要重新打开,
with open('XX.txt','a') as file:
    file.write('书山有路勤为径\n')
当然,with as不只是用来读写文件的


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-5 19:40:53 | 显示全部楼层
本帖最后由 15195775117 于 2020-12-24 11:09 编辑

按指定编码打开文件

使用open()打开文件默认gbk编码
这回,可试验下我以前遇到的UTF-16编码的北京总站温湿度文件了
file=open('XX.txt','r',encoding='utf-8')


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-5 19:48:55 | 显示全部楼层
本帖最后由 15195775117 于 2020-12-24 11:10 编辑

读取文本(逐字、逐行)

file=open('XX.txt','r')
#读取前9个字符(在这里,一个汉字也只占一位,IDL是3位)
x=file.read(9)
print('前9个字符:',x)
#读取所有内容:
x=file.read()
print('所有内容:',x)

#设置开始读取的位置:
#rb模式读文件可以在seek设置从尾部开始file.seek(移动位置个数,2),其他只能从头读
#跳过开头6个字符,读取其余的(这里汉字占2位)
file.seek(6)
x=file.read()
file.close()
print(x)

#逐行读取
readline()每读一行,起始点就自动下移
line=file.readline()
print(line)
line=file.readline()
print(line)

#读取全部行
lines=file.readlines()
print(lines)


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-5 19:51:58 | 显示全部楼层
本帖最后由 15195775117 于 2020-12-24 11:10 编辑

写文本

写入单一字符串,用write(),
写入字符串数组用writelines()
file=open('XX.txt','a')
file.writelines(['书山有路勤为径','学海无涯苦做舟'])
file.close()

换行符需要自己添加

在文件关闭之前把缓冲区内容写入文件用file.flush()


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-5 20:02:57 | 显示全部楼层
本帖最后由 15195775117 于 2020-12-24 11:11 编辑

文件夹操作

import os

#输出操作系统(windows系统是nt)
print(os.name)

#获取当前目录
cur=os.getcwd()
print(cur)

#设置当前路径:
os.chdir(r'C:\Users\朽木\Desktop\shu')
cur=os.getcwd()
print(cur)

#某目录的信息:
print(os.listdir(cur))

#创建目录
#与IDL的file_mkdir类似,不可覆盖
os.mkdir(r'C:\Users\朽木\Desktop\新目录')

#创建多级目录
#可能父子目录都不存在时需要这个,相当于一次建多个文件夹
path=r'C:\Users\朽木\Desktop\父目录\子目录\孙目录'
os.makedirs(path)

#删除目录
#目录非空不给删(与IDL一样呢)
os.rmdir(path)

#删除文件(夹):
#(删除文件正常,删除文件夹拒绝访问)

os.remove(r'C:\Users\朽木\Desktop\新目录')

#删除非空目录(谨慎使用):
import shutil#(该模块还有文件压缩功能)
shutil.rmtree(...)

#删除多级目录,从最底层目录开始,一直删到非空文件夹为止:
os.removedirs(r'C:\Users\朽木\Desktop\父目录\子目录\孙目录')

#遍历目录树
w=os.walk(r'D:\迅雷下载')
for root,dirs,files in w:
    print(root,dirs,files)

#获取文件(夹)的绝对路径
print(os.path.abspath('0.jpg'))

#判断文件(夹)是否存在
print(os.path.exists('0.jpg'))

#将文件夹与目录拼接:
fold=r'C:\Users\朽木\Desktop'
filename='1.jpg'
whole=os.path.join(fold,filename)
print(whole)

##分离路径和文件名(包括扩展名):
file=r'C:\Users\朽木\Desktop\0.jpg'
x=os.path.split(file)
path=x[0]
name=x[1]

#分离文件名和扩展名:
file=r'C:\Users\朽木\Desktop\0.jpg'
x=os.path.splitext(name)
print(x)

#提取目录和文件名
#(与IDL的file_dirname、file_basename一样)
file=r'C:\Users\朽木\Desktop\0.jpg'
name=os.path.basename(file)
path=os.path.dirname(file)
print(path)
print(name)

#判断路径是否有效
#(与是否存在有区别吗?)
ok=os.path.isdir(r'C:\Users\朽木\Desktop')
print(ok)

#文件夹重命名
fold1=r'C:\Users\朽木\Desktop\旧目录'
fold2=r'C:\Users\朽木\Desktop\新目录'
os.rename(fold1,fold2)

#文件重命名
#重命名过程把路径名字改变,相当于剪切
#不过还是只改名字就好,避免bug
file1=r'D:\宣城\6.jpg'
file2=r'D:\9.jpg'

os.rename(file1,file2)

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-5 20:09:14 | 显示全部楼层
本帖最后由 15195775117 于 2020-12-24 11:12 编辑

文件权限

#是否可读(没搞清,待完善)
file='中国历史地图集-先秦.pdf'
print(os.access(file,1))

#修改访问权限?(没搞清,待完善,这个很重要)
os.chmod(r'C:\Users\朽木\Desktop\目录',...)

#时间格式转换函数:
#不是儒略日格式
def formatTime(t):
    import time
    return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(t))

#使用关联的应用程序打开文件
#跟IDL的spawn一样

os.startfile('D:\倩女幽魂1987.mp4')

#文件(夹)的信息?
st=os.stat('0.jpg')
print('保护模式:',st.st_mode)
print('大小:',st.st_size,'bit')
print('最后一次访问时间:',formatTime(st.st_atime))
print('最后一次修改时间:',formatTime(st.st_mtime))
print('最后一次状态变化时间:',formatTime(st.st_ctime))

print('设备名:',st.st_dev)




密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-10-7 16:30:41 | 显示全部楼层
{:5_235:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表