文件操作基础
一.数据读取
1.读取
with open('text.txt') as file: contents = file.read() print(contents)
这样做会有空格,所以我们用rstrip()函数清除空格
with open('text.txt') as file: contents = file.read() print (contents.rstrip())
#rstrip([chars])函数中chars – 指定删除的字符(默认为空格)
2.添加文件路径的数据读取
file_path = '/home/others/filename.txt' with open(file_path) as file:
#注意:windows系统在显示文件路径时是反斜杠\而不是斜杠/,我们在python编程时要用斜杠/,此外,还可以使用\方式,表示转义。
例如’C:\path\to\file.txt’或者’C:/path/to/file.txt’都是可以的。
3.逐行
filename = 'haha.txt' with open(filename) as file: for line in file: print (line)
调用open()函数把一个表示文件以及文件内容的对象赋予给了变量file。
这里同样会遇到输出空格的问题,再次调用rstrip()
filename = 'haha.txt' with open(filename) as file: for line in file: print (line.rstrip())
接下来要存储文件的各行的内容:
需要注意的是,在使用关键字with的时候,open()返回的文件对象只会在with代码块内可用,如果要在with外访问,可以在with内先把各行存储在一个列表中,然后在with外使用这个列表:这样做的好处是:我们可以立即处理文件的各个部分也可以选择推迟处理文件内容。
filename = 'haha.txt' with open(filename) as file: lines = file.readlines() for line in file: print (line.rstrip())
这里我们用readlines()读取每一行之后,将其存入在一个列表中,然后实现了在with外进行循环打印lines列表内的内容。
4.存储之后的调用:
可以通过创建一个字符串,一个包含所有文件中存储的所有的数字的字符串,且没有空格:
filename = 'haha.txt' with open(filename) as file: lines = file.readlines() little_string = ' ' for line in lines: little_string += line.rstrip() print(little_string) print(len(little_string))
#这是为了把各个行加入到空列表little_string里面:
for line in lines: little_string += line.rstrip()
且变量little_string指向的字符串包含原来的位于每行左边的空格,可以用strip()
值得注意的是:python在读取文件时,会把所有的文本都解读为字符串,如果读取的是整数,要用int()或float()将字符转换再进行数据处理。
5.选择性输出:
filename = 'hhh_many.txt' with open(filename) as file: lines = file.readlines() big_string = ' ' for line in lines: big_string += line.strip() print(f'{big_string[44:55]}......') print(len(big_string))
注释:python的print字符串前面加f表示格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式,如果字符串里面没有表达式,那么前面加不加f输出应该都一样.
Python3.6新增了一种f-字符串格式化
格式化的字符串文字前缀为’f’和接受的格式字符串相似str.format()。它们包含由花括号包围的替换区域。替换字段是表达式,在运行时进行评估,然后使用format()协议进行格式化。
formatted string literals, 以 f 开头,包含的{}表达式在程序运行时会被表达式的值代替。
(引用)
6.小练习
判断圆周率中是否存在你的生日:
filename = 'hhh_many.txt' with open(filename) as file: lines = file.readlines() big_string = ' ' for line in lines: big_string += line.strip() birthday = input('Enter your birthday') if birthday in big_string: print(f'your birthady {birthday} appears in the first million digits of pi') else: print('not found')