Python-从文件中读取数据-Sat-Sun
10.1
文件读取数据可以整个文件读取,也可以逐行读取。
首先在保存有.py文件的文件夹里创建一个pi_digist.txt文件,文件内容是
3.14
9265
3589
执行程序
file_reader.py
with open('pi_digist.txt') as file_object:
#接受文件名参数,在程序所在目录查找指定文件,
#返回一个表示文件的对象,将对象存在变量里content = file_object.read()#读取整个文件print(content)
>>>3.14
9265
3589
关键字with会在合适的时机关闭文件,如果调用close函数来执行文件关闭的操作,会有可能出现两种情况。当close条件语句未执行,文件未及时关闭,文件数据受损。或文件过早关闭,在需要访问时则会程序报错。
10.1.2 文件路径
相对路径,是指相对当前执行程序所在目录。
file_path = '\\test\\pi_digist.txt'
#注意是双反斜杠,在linux系统是斜杠
绝对路径是文件在计算机的所在位置的目录。
file_path = 'C:\\Users\\17483\\Desktop\\python_work\\test\\pi_digist.txt'
10.1.3逐行读取
逐行读取文件可以对文件对象使用for循环。
file_path = 'pi_digist.txt'with open(file_path) as file_object:for line in file_object:print(line)
>>>3.1492653589
#输出中的空白行来自两个换行符,
#一个换行符来自文件本身
#另一个是print函数输出时加的
要消除空白行可以用rstrip(),表示消除右边空行。
左边用lstrip(),同时消除两边用strip()。
file_path = 'pi_digist.txt'with open(file_path) as file_object:for line in file_object:print(line.rstrip())
>>>3.14
9265
3589
10.1.4创建包含文件各行内容的列表
使用with时函数返回的对象只能在with代码块里使用。如果要在其他地方使用该文件对象,可以把每行数据存储在列表里。
file_path = 'pi_digist.txt'
with open(file_path) as file_object:lines = file_object.readlines()
#readlines()函数返回一个以每行内容为元素的列表
#列表存储在变量lines
for line in lines:print(line.rstrip())
#遍历列表每个元素
>>>3.14
9265
3589
10.1.5使用文件内容
我们要创建一个包含文件所有内容且没有空格的字符串。
file_path = 'pi_digist.txt'
with open(file_path) as file_object:lines = file_object.readlines()
#打开文件,将每行内容存进列表
pi_string = ''
#创建一个存储了空字符的变量
for line in lines:#遍历列表pi_string += line.strip()
#使用strip()删除字符串两边的空格
print(pi_string)
print(len(pi_string))>>>3.1492653589
12
如果要将读取到的数字字符串作为数值使用,可以使用int()函数转换为整数,或float()转换为浮点数。
10.1.6可以处理大文件
这个文件的数据并不大,这个程序还可以处理更大的文件文件大小的限制取决于你电脑的内存。
file_path = 'pi_digist.txt'
with open(file_path) as file_object:lines = file_object.readlines()pi_string = ''
for line in lines:pi_string += line.strip()
print(pi_string[:5])
print(len(pi_string[:5]))>>>3.149
5
10.1.7判断圆周率中是否存在你的生日
file_path = 'pi_digist.txt'
with open(file_path) as file_object:lines = file_object.readlines()pi_string = ''
for line in lines:pi_string += line.strip()birth = input('Please enter your birthday:')
if birth in pi_string:print('Yes!')
else:print('No...')>>>Please enter your birthday:12
No...
输出n位圆周率精度的文章
10-1
file_path = 'test\\pi_digist.txt'with open(file_path) as file_object:content = file_object.read()print(content)with open(file_path) as file_object:for line in file_object:print(line.rstrip())with open(file_path) as file_object:lines = file_object.readlines()for li in lines:print(li.rstrip())>>>3.14
1592
6535
893.14
1592
6535
89
3.14
1592
6535
89
10-2
file_path = 'test\\pi_digist.txt'with open(file_path) as file_object:lines = file_object.readlines()str = ''
for line in lines:str += line.replace('1','0')
print(str)>>>3.04
0592
6535
89