03-python中的文件操作-01

03-python中的文件操作-01


总体 要讲的大纲内容 如下

  • 打开,关闭,查看文件
  • 打开文件一些选项
  • with 语句的使用

​ 有时候 我们可能需要记录一些程序中的数据,以及要保存一些中间结果,这个时候我们就要把 数据存起来。 一般 情况 是存放在数据库里面,mysql ,redis ,mongodb ,postgresql 等等。 还有的时候 我们 把数据 保存在 文件里面,今天 主要的话题,讨论 如何 使用文件 保存数据, 读写文件相关的操作。

如何打开文件

在python 打开 文件 非常方便。 open 就可以打开文件,然后就开始读了。

img-03-01

# -*- coding: utf-8 -*-


f = open('hello.txt')

content = f.read()

print(content)

f.close()

open 就会打开文件, 返回一个 TextIOWrapper 对象 , 然后 调用 read 就可以读取 文件里面的数据了, 读完之后 记得 要关闭文件哦。

当你使用完一个文件时,调用 f.close() 方法就可以关闭它并释放其占用的所有系统资源。 当你 关闭 文件后,就不能再次读取了,除非 在一次 打开它。

如果确定打开的文件不用的话 ,要及时关闭哦。

打开文件的姿势

打开 文件的方式 有很多种,

如果尝试打开一个不存在的文件会报错的。下面的例子 就会报错 FileNotFoundError

f = open('hello1.txt')



Traceback (most recent call last):
  File "C:/Users/changfx/PycharmProjects/python-study/myfile.py", line 4, in <module>
    f = open('hello1.txt')
FileNotFoundError: [Errno 2] No such file or directory: 'hello1.txt'

从上面的例子中,可以知道 文件读写 也有可能发生一些错误。 我们 如何能够打开一个文件 ,如果不存在,我们就创建它,存在 就打开它呢?

这个 就要说一下,打开 文件的正确姿势。 我打开文件 是为了读,还是为了写, 对于 open 有一个参数

mode 这里可以是读,或者写。

mode =‘r’ 代表 读

mode =‘w’ 代表写

f = open('hello.txt',mode='r')
f = open('hello.txt',mode='w')

如何读取文件呢? 刚刚的例子,也看到了,可以用 f.read() 去读取文件内容。


f = open('hello.txt',mode='r')

content = f.read()

print(content)

f.close()

"""
1111
2222
3333
"""

一般情况 我们很少使用f.read() 因为 read() 默认是读取文件的全部内容。 如果文件比较大, 电脑会直接卡死的,占用大量内存。

我们可以使用 f.readline() 这个方法名,起的非常好,直接就能够理解 这是一行一行读取文件内容。

f = open('hello.txt',mode='r')

content = f.readline()
while content:
    print(content)
    content = f.readline()

f.close()

看下 readline 会把换行符也会读进来。

img-03-02

f.readline() 从文件中读取单独一行,字符串结尾会自动加上一个换行符( \n ),只有当文件最后一行没有以换行符结尾时,这一操作才会被忽略。这样返回值就不会有混淆,如果 f.readline() 返回一个空字符串,那就表示到达了文件末尾,如果是一个空行,就会描述为 '\n',一个只包含换行符的字符串

还有一个方法 f.readlines() 它返回的是以行为单位的列表,包括换行符的, 这个相当于是 f.readline() 读完每行后,存放在一个列表中 进行返回。

img-03-03

写入文件

如何写文件,首先打开文件方式 mode =‘w’ ,才能开始写文件。

开始尝试写 入文件 f.write() 写入文件

f = open('hello.txt',mode='w')


f.writelines("Beautiful is better than ugly.\n")
f.writelines('Explicit is better than implicit.\n')
f.writelines('Simple is better than complex.\n')


f.close()

执行上的代码,然后看下 hello.txt 文件

img-03-04

发现 之前写的 111,222,333 , 不见了。 这种默认 mode=w 的方式,就会覆盖文件内容,重新写入文件。

如果要实现 追加写入的话 mode =‘a+’

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

f = open('hello.txt',mode='a+')

# \n 代表是换行的意思,要自己换行,否则写在一行上了。
f.write("Beautiful is better than ugly.\n")
f.write('Explicit is better than implicit.\n')
f.write('Simple is better than complex.\n')


# 关闭打开的文件
f.close()

写入文件,还可以使用 f.writelines() 这里可以传入一个list 进行写入,用法类似

f = open('hello.txt',mode='w')


contents = ["Beautiful is better than ugly.\n",
            "Explicit is better than implicit.\n",
            "Simple is better than complex.\n",
            "Complex is better than complicated.\n",
            "Flat is better than nested.\n"]

f.writelines(contents)
# 关闭打开的文件
f.close()

对于这个f 还有一些 其他的方法,比如 获取当前的位置,移动位置,查看文件描述符等。

file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:

序号方法及描述
1file.close()关闭文件。关闭后文件不能再进行读写操作。
2file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
3file.fileno()返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
4file.isatty()如果文件连接到一个终端设备返回 True,否则返回 False。
6[file.read(size])从文件读取指定的字节数,如果未给定或为负则读取所有。
7[file.readline(size])读取整行,包括 “\n” 字符。
8[file.readlines(sizeint])读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
9[file.seek(offset, whence])移动文件读取指针到指定位置
10file.tell()返回文件当前位置。
11[file.truncate(size])从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。
12file.write(str)将字符串写入文件,返回的是写入的字符长度。
13file.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

mode 有很多种 还可以组合 。

mode : 最常用的 就是 r 只读 , w 写入。

还有 t b , t就是 文本模式, b 就是二进制模式,打开一个二进制文件,就要用这个。

如果追加写入文件 mode =a+ , 这样是追加写入。

模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

r+ vs w+ 区别

r+:可读可写,若文件不存在,报错 ;w+: 可读可写,若文件不存在,创建。

这两个文件的指针 都会在文件的开始位置

模式可做操作若文件不存在是否覆盖
r+读,写报错
w+读写创建一个文件

一些模式的区别

关于 有没有 + 号 的区别 ?

模式可做操作若文件不存在是否覆盖
r只能读报错-
r+可读可写报错
w只能写创建
w+可读可写创建
a只能写创建否,追加写
a+可读可写创建否,追加写

with 语句的用法

正确 打开文件的姿势 ,with 语句 打开文件 不需要 显示的关闭文件, with 语句,已经帮助我们 关闭了文件。

当我们退出 with 语句的时候,就会关闭文件.

with open('hello.txt','w') as f:
    f.write("hello Frank")
    
print("f.write done.")

大部分情况下,我们更喜欢 用这种方式 打开文件,因为这样看起来更加优雅,再也不用担心 忘记关闭文件了。

简单说一下pep文档是什么?

pep 是 Python Enhancement Proposals 的缩写 ,翻译过来 就是 python增强建议。就是一些人对python 发展 提出的一些建议, 如果建议被采纳了,将来就会增加这个功能。

比如pep8 文档 ,Style Guide for Python Code 就是python的一些风格规范,作为python开发工程师,这还是要了解一些,这个文档主要讲了 一些命名规范,对齐风格,最大的行的长度等等。

如果英文不是特别好,我准备了一个翻译的版本,你可以参考一下。 python3中风格规范

总结

​ 今天 我们 学习了 如何 使用文件来保存数据,如何 打开文件,写入数据。 其实 大部分工作的情况下,很少写入文件,因为大部分时候需要我们把数据保存到 数据库里面。随着 代码量的增加,对python的认识的深入 ,有的时候 需要一种代码规范 来 保证我们 代码看起来更加的专业。 所以 我推荐 你看下 pep8 文档。参考文档中 给出了 pep 文档的地址, 以及pep8 文档地址,有时间 要好好读一下。 好的,今天 的内容不算多,大部分的内容需要去读,然后跟着去练习。 加油!

参考文档

Input and Output-官方文档

文件操作-零基础学python
输入和输出 pythondoc

Python3 输入和输出-runoob

pep index

pep-0008

分享快乐,留住感动. 2020-04-08 23:37:19 --frank
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Python下载wrf-python库,可以按照以下步骤进行操作: 1. 首先,确保你的Python环境已经安装了ssh与sftp的库,例如paramiko库。 2. 创建一个SSH连接,连接到服务器。 3. 找到wrf-python库的资源全名,例如wrf-python-1.1.3.tar.gz。 4. 使用SFTP从服务器上下载这个资源文件至本地。你可以使用sftp.get() 方法来实现,其第一个参数是服务器上的文件路径,第二个参数是本地存储路径。 5. 下载完成后,关闭连接。 请注意,为了确保文件名的有效性,需要注意Windows操作系统的敏感字符问题。如果文件包含Windows敏感字符,例如冒号(:),需要使用replace()方法将其替换为有效字符。比如将':'替换为'_'。 以下是一个示例代码,演示了如何使用Python批量下载wrf-python资源: ```python import os import paramiko # 创建SSH连接 ssh = paramiko.SSHClient() ssh.connect('服务器地址', username='用户名', password='密码') # 远程和本地的目录路径 remote_dir = '服务器上wrf-python资源的路径' local_dir = '本地存储路径' # 获取服务器目录下的所有文件 sftp = ssh.open_sftp() files = sftp.listdir(remote_dir) # 批量下载wrf-python资源 for f in files: print('Beginning to download file', f) print('Downloading file:', f + '.nc') # 替换文件的敏感字符 f1 = f.replace(':', '_') # 下载文件 sftp.get(os.path.join(remote_dir, f), os.path.join(local_dir, f1 + '.nc')) print('Download file success:', f) print('#################################') # 关闭连接 sftp.close() ssh.close() ``` 请根据你的实际情况修改代码的服务器地址,用户名,密码,服务器上wrf-python资源的路径以及本地存储路径。这样,你就可以使用Python下载wrf-python库了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值