关于python中文件读写的操作中出出现了字符串和字节流的概念,因为我基础知识太薄弱了,就根据代码和代码结果进行了理解。
#1
fname = input("please input target file:")
fo = open(fname,"r")
for line in fo.read():
print(line)
fo.close()
#2
fname = input("please input target file:")
fo = open(fname,"r")
for line in fo.readline():
print(line)
fo.close()
#3
fname = input("please input target file:")
fo = open(fname,"r")
for line in fo.readlines():
print(line)
fo.close()
上述代码的运行结果分别为
#1
please input target file:7.1.txt
h
e
l
l
o
m
i
y
a........
#2
please input target file:7.1.txt
h
e
l
l
o
m
i
y
a#3
please input target file:7.1.txt
hello miyathis is my gift
Process finished with exit code 0
通过对比代码结果和下列表格内容,可以理解
操作方法 | 含义 |
---|---|
<file>.readall() | 读入整个文件内容,返回一个字符串或字节流* (字符串或字节流取决于文件打开模式,如果是文本方式打开,返回字符串;否则返回字节流) [但是找不到这个指令] |
<file>.read(size=-1) | 从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流 |
<file>.readline(size=-1) | 从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字符流 |
<file>.readlines(hint=-1) | 从文件中读入所有行,以每行为元素形成一个列表,如果给出参数,读入hint行 |
所以代码#3就是输入一个文件名,然后打开文件并赋值给文件对象变量fo。文件的全部内容通过fo.readlines()方法读入到一个列表中,列表的每个元素是文件的每一行内容,然后通过for-in方式遍历列表,处理每行内容。
但上述方法很浪费内存
所以可以
fname = input("please input target file:")
fo = open(fname,"r")
for line in fo:
print(line)
fo.close()
最合理的是逐行读入内容到内存,并逐行处理,在这里将文件本身作为一个行序列,遍历文件的所有行可以直接完成 。
最后解释一下字符串和字节流
字符串是字符的序列表示,可以用单引号、双引号、三引号表示,三引号可以包含双引号,以此类推。
print()函数可以直接打印字符串,这是输出字符串的常用方式,字符串是给人看的;
字节流是字节序列,可以直接存储在硬盘,字节流和字符串之间的映射编码/解码。字节流是给计算机看的,给计算机传输或者保存的。