21. python ----read()

目录

1. open()

1.1 open() close()

1.2 with open() as object:

2.read()-读取文件

2.1 read(size)

 2.2  read()

3.  readlines() -用于一次性逐行读取特定的文件

3.1 readlines() -读取整个文件所有行,保存在一个列表中

3.2 readlines(size)--读取指定行

4.  readline()--读取文件中的一行,

4.1 readline()-读取文件中的一行

4.2readline(size)

Python读取文件一般是利用open()函数以及read()函数来完成,但该方式仅适合读取小文件。因为调用read()会一次性读取文件的全部内容,调用readlines()一次读取所有内容并按行返回list。如果文件过大,如10G,会造成MemoryError 内存溢出,正确的做法:可以反复调用read(size)法,每次指定读取size个字节的内容。

处理大文件核心思路:通过参数指定每次读取的大小长度,这样就避免了因为文件太大读取出问题。

1. open()

1.1 open() close()

用于打开一个文件,并返回文件对象。如果文件无法打开,会抛出OSError。

注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法

open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。

open(file, mode='r')

完整的语法格式为:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener:

mode 参数有:

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

1.2 with open() as object:

with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
在这个程序中,第1行代码做了大量的工作。我们先来看看函数open()。要以任何方式使用
文件——哪怕仅仅是打印其内容,都得先打开文件,这样才能访问它。函数open()接受一个参数:
要打开的文件的名称。 Python在当前执行的文件所在的目录中查找指定的文件。在这个示例中,
当前运行的是file_reader.py,因此Python在file_reader.py所在的目录中查找pi_digits.txt。函数open()
返回一个表示文件的对象。在这里, open('pi_digits.txt')返回一个表示文件pi_digits.txt的对
象; Python将这个对象存储在我们将在后面使用的变量中。
关键字with在不再需要访问文件后将其关闭。在这个程序中,注意到我们调用了open(),但
没有调用close();你也可以调用open()和close()来打开和关闭文件,但这样做时,如果程序存
在bug,导致close()语句未执行,文件将不会关闭。这看似微不足道,但未妥善地关闭文件可能
会导致数据丢失或受损。如果在程序中过早地调用close(),你会发现需要使用文件时它已关闭
(无法访问),这会导致更多的错误。并非在任何情况下都能轻松确定关闭文件的恰当时机,但通
过使用前面所示的结构,可让Python去确定:你只管打开文件,并在需要时使用它, Python自会
在合适的时候自动将其关闭。
有了表示pi_digits.txt的文件对象后,我们使用方法read()(前述程序的第2行)读取这个文
件的全部内容,并将其作为一个长长的字符串存储在变量contents中。这样,通过打印contents
的值,就可将这个文本文件的全部内容显示出来:
 

2.read()-读取文件

用于从文件读取指定的字节数,如果未给定或为负则读取所有。

file.read([size])

size 作为一个可选参数,用于指定一次最多可读取的字符(字节)个数,如果省略,则默认一次性读取所有内容。

test.txt文件中内容:

2.1 read(size)

通过使用 size 参数,指定 read() 每次可读取的最大字符(或者字节)数

read([size]) 方法从文件当前位置起读取size个字节

   注意:size ,包括换行符

代码:

A=open('test.txt')
print 'Aname:'+A.name
size=A.read(8)
print 'size:'+size
print (type(size))
A.close()

输出结果:

Aname:test.txt
size:a1
bb2
c
<type 'str'>

从文件当前位置起读取

        第一次read(8)读取到c字母,再接着读,就输出c2

代码:

A=open('test.txt')
print 'Aname:'+A.name
size=A.read(8)
print 'size:'+size
print (type(size))
# A.close()

read =A.read()
print 'read():' +read
print (type(read))

输出:

Aname:test.txt
size:a1
bb2
c
<type 'str'>
read():c3

<type 'str'>

 2.2  read()

则表示读取至文件结束为止,它返回为字符串对象。

代码:

A = open('test.txt')
read =A.read()
print 'read():' +read
print (type(read))

输出:

read():a1
bb2
cc3

<type 'str'>

3.  readlines() -用于一次性逐行读取特定的文件

 readline([size]) 用于一次性逐行读取特定的文件

读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。

  • readlines()函数只从给定文件中读取一个完整的行;读取后,它以列表的形式返回包含所有元素的整行。
  • 如果我们想以正常读取模式打开文件,readline()函数将返回字符串。
  • 如果我们想以二进制模式打开文件,那么 readline()函数将返回一个二进制对象。
  • 在行尾追加一个换行符(" \n ")也是非常有益的。
  • 这个 readlines()函数最适合小文件,包含的数据较少,可以在更短的时间内轻松读取整个文件。
  • 它首先一次性将文件内容读入内存,然后将它们分成不同的行。借助 strip()函数,我们可以遍历由 readline()函数生成的整个列表,通过使用 strip()函数,我们可以剥离换行符' \n '字符。

readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。

如果碰到结束符 EOF 则返回空字符串。

3.1 readlines() -读取整个文件所有行,保存在一个列表中

读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存

#readlines() ,逐行读取,每一行作为1个元素,返回一个列表
"""
15:28  c4a1连接ap1 密码输入错误
15:33 me 0226正常下线
"""
file = "..\data\pi_digits.txt"
files = open(file, mode="r", encoding="UTF-8")
file1=files.readlines()
print("file1:", file1)

3.2 readlines(size)--读取指定行

size:指读取多少字节的内容

如果size不够一行,也要输出一行的全部内容

例如 文件中第一行字节数是24,但是 size 是1 ,意思是读取1字节的内容,但因为是按行读取,所以第一行的数据全部读取

若size=25,则读取前两行内容

#readlines(size) ,逐行读取,每一行作为1个元素,返回一个列表
"""
15:28  c4a1连接ap1 密码输入错误
15:33 me 0226正常下线
"""
file = "..\data\pi_digits.txt"
files = open(file, mode="r", encoding="UTF-8")
count=len(files.readline())
print("count:",count)
file1=files.readlines(1)
print("file1:", file1)

4.  readline()--读取文件中的一行,

4.1 readline()-读取文件中的一行

readline() 函数用于读取文件中的一行,包含最后的换行符“\n”

由于 readline() 函数在读取文件中一行的内容时,会读取最后的换行符“\n”,再加上 print() 函数输出内容时默认会换行,所以输出结果中会看到多出了一个空行。

#readline()
"""
123456789
123
456
"""
file = "..\data\pi_digits.txt"
files = open(file, mode="r", encoding="UTF-8")
# count=len(files.readline())
# print("count:",count)
file1=files.readline()
print("file1:", file1)

4.2readline(size)

指读取的行数中 size字符的内容,当size大于读取行内容字符时,也只是输出该行全部内容

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用python.exe -m pip install --upgrade pip命令可以用来升级pip软件包管理工具。升级pip的目的是为了获取最新的功能和修复已知的问题。根据提供的引用内容,有几种方法可以解决pip升级不成功的问题。 首先,可以尝试使用python -m pip install --upgrade pip命令来解决升级不成功的问题。这个命令会使用默认的pip源来下载并安装最新版本的pip。 如果下载超时或者需要使用国内镜像源,可以使用python -m pip install --upgrade pip -i http://mirrors.aliyun.com/pypi/simple/命令来指定使用阿里云镜像源进行升级。另外一个国内镜像源示例是python -m pip install --upgrade pip -i https://pypi.douban.com/simple。 有时候在使用python -m pip install --upgrade pip命令时会出现连接错误或者SSL错误的问题。这种情况下,可以尝试多次重试来解决。例如,使用python -m pip install --upgrade pip命令时出现了Retrying (Retry(total=0,connect=None,read=None,redirect=None, status=None)) after connection broken by 'SSLError(SSLEOFError(8,'EOF occurred in violation of protocol (_ssl.c:997)'))'的错误提示,可以多次重试来解决。 总结起来,要使用python.exe -m pip install --upgrade pip命令来升级pip软件包管理工具,如果升级不成功,可以尝试使用不同的镜像源或者多次重试来解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值