这个是以前我自己做的一个网站阳江市企业网站优化
web/
2025/10/3 1:27:39/
文章来源:
这个是以前我自己做的一个网站,阳江市企业网站优化,承德北京网站建设,三七游戏官网目录
一、从文件中读取数据
#xff08;一#xff09;读取整个文件
#xff08;二#xff09;文件路径
#xff08;三#xff09;逐行读取
#xff08;四#xff09;创建一个包含文件各行内容的列表
#xff08;五#xff09;使用文件的内容
#xff08;六一读取整个文件
二文件路径
三逐行读取
四创建一个包含文件各行内容的列表
五使用文件的内容
六包含一百万位的大型文件
七圆周率值中包含你的生日吗
二、写入文件
一写入空文件
二写入多行
三附加到文件 一、从文件中读取数据 文本文件可存储的数据量多得难以置信天气数据、交通数据、社会经济数据、文学作品等。每当需要分析或修改存储在文件中的信息时读取文件都很有用对数据分析应用程序来说尤其如此。例如可以编写一个这样的程序读取一个文本文件的内容重新设置这些数据的格式并将其写入文件让浏览器能够显示这些内容。 要使用文本文件中的信息首先需要将信息读取到内存中。为此你可以一次性读取文件的全部内容也可以以每次一行的方式逐步读取。
一读取整个文件 要读取文件需要一个包含几行文本的文件。下面首先创建一个文件它包含精确到小数点后30位的圆周率值且在小数点后每10位处换行
3.1415926535 8979323846 2643383279要动手尝试后续示例可在编辑器中输入这些数据行再将文件保存为 pi_digits.txt 。 下面的程序打开并读取这个文件再将其内容显示到屏幕上
with open(pi_digits.txt) as file_object:contents file_object.read()
print(contents) 在这个程序中第一行代码做了大量的工作。我们先来看看函数 open() 。要以任何方式使用文件那怕仅仅是打印其内容都得先打开文件才能访问它。函数 open() 接受一个参数要打开的文件的名称。Python 在当前执行的文件所在的目录中查找指定的文件。在本例中当前运行的是 file_reader.py 因此 Python 在 file_reader.py 所在的目录中查找 pi_digits.txt 。函数 open() 返回一个表示文件的对象。在这里open(pi_digits.txt) 返回一个表示文件 pi_digitls.txt 的对象 Python 将该对象赋给 file_object 供以后使用。 关键字 with 在不再需要访问文件后将其关闭。在这个程序中注意到我们调用了 open() 但没有调用 close() 。也可以调用 open() 和 close() 来打开和关闭文件但这样做时如果程序存在 bug 导致方法 close() 未执行文件将不会关闭。这看似微不足道但未妥善关闭文件可能导致数据丢失或受损。如果在程序中过早调用 close() 你会发现需要使用文件时它已关闭无法访问这会导致更多的错误。并非在任何情况下都能轻松确定关闭文件的怡当时机但通过使用前面所示的结构可让 Python 去确定你只管打开文件并在需要时使用它Python 自会在合适的时候自动将其关闭。 有了表示 pi_digits.txt 的文件对象后使用方法 read()前述程序的第二行读取这个文件的全部内容并将其作为一个长长的字符串赋给变量 contents 。这样通过打印 contents 的值就可将这个文本文件的全部内容显示出来
3.1415926535 8979323846 2643383279 相比于原始文件该输出唯一不同的地方是末尾多了一个空行。为何会多出这个空行呢因为 read() 到达文件未尾时返回一个空字符串而将这个空字符串显示出来时就是一个空行。要删除多出来的空行可在函数调用 print() 中使用 rstrip()
with open(pi_digits.txt) as file_object:contents file_object.read()
print(contents.rstrip()) 前面说过Python 方法 rstrip() 删除字符串末尾的空白。现在输出与原始文件的内容完全相同
3.1415926535 8979323846 2643383279二文件路径 将类似于pi_digits.txt 的简单文件名传递给函数 open() 时Python 将在当前执行的文件即 .py 程序文件所在的目录中查找。 根据你组织文件的方式有时可能要打开不在程序文件所属目录中的文件。例如你可能将程序文件存储在了文件夹 python_work 中而该文件夹中有一个名为 text_files 的文件夹用于存储程序文件操作的文本文件。虽然文件夹 text_files 包含在文件夹 python_work 中但仅向 open() 传递位于前者中的文件名称也不可行因为 Python 只在文件夹 python_work 中查找而不会在其子文件夹 text_files 中查找。要让 Python 打开不与程序文件位于同一个目录中的文件需要提供文件路径让 Python 到系统的特定位置去查找。 由于文件夹 text_files 位于文件夹 python_work 中可以使用相对文件路径来打开其中的文件。相对文件路径让 Python 到指定的位置去查找而该位置是相对于当前运行的程序所在目录的。例如可这样编写代码
with open(text_file/filename.txt) as file_object: 这行代码让 Python 到文件夹 python_work 下的文件夹 text_files 中去查找指定的 .txt 文件。 注意显示文件路径时Windows 系统使用反斜杠\而不是斜杠/但在代码中依然可以使用斜杠。 还可以将文件在计算机中的准确位置告诉 Python 这样就不用关心当前运行的程序存储在什 么地方了。这称为绝对文件路径。在相对路径行不通时可使用绝对路径。例如如果 text_files 并不在文件夹 python_work 中而在文件夹 other_files 中则向 open() 传递路径 text_files/filename.txt 行不通因为 Python 只在文件夹 python_work 中查找该位置。为明确指出希望 Python 到哪里去查找需要提供完整的路径。 绝对路径通常比相对路径长因此将其赋给一个变量再将该变量传递给 open() 会有所帮助
file_path /home/ehmatthes/other_files/text_files/filename.txt
with open(file_path) as file_object: 通过使用绝对路径可读取系统中任何地方的文件。就目前而言最简单的做法是要么将数据文件存储在程序文件所在的目录要么将其存储在程序文件所在目录下的一个文件夹如 text_files 中。 注意如果在文件路径中直接使用反斜杠将引发错误因为反斜杠用于对字符串中的字符进行转义。例如对于路径 C:\path\to\file.txt 其中的 \t 将被解读为制表符。如果一定要使用反斜杠可对路径中的每个反斜杠都进行转义如 C:\\path\\to\\file.txt 。 三逐行读取 读取文件时常常需要检查其中的每一行可能要在文件中查找特定的信息或者要以某种方式修改文件中的文本。例如你可能要遍历一个包含天气数据的文件并使用天气描述中包含 sunny 字样的行。在新闻报道中你可能会查找包含标签 headline 的行并按特定的格式设置它。 要以每次一行的方式检查文件可对文件对象使用for循环
filename pi_digits.txtwith open(filename) as file_object:for line in file_object:print(line) 将要读取的文件的名称赋给变量 filename 。这是使用文件时的一种常见做法。变量 filename 表示的并非实际文件——它只是一个让 Python 知道到哪里去查找文件的字符串因此可以轻松地将 pi_digits.txt 替换为要使用的另一个文件的名称。调用 open() 后将一个表示文件及其内容的对象赋给了变量 file_object 。这里也使用了关键字 with 让 Python 负责妥善地打开和关闭文件。为查看文件的内容通过对文件对象执行循环来遍历文件中的每一行。 打印每一行时发现空白行更多了
3.1415926535 8979323846 2643383279 为何会出现这些空白行呢因为在这个文件中每行的末尾都有一个看不见的换行符而函数调用 print() 也会加上一个换行符因此每行末尾都有两个换行符一个来自文件另一个来自函数调用 print() 。要消除这些多余的空白行可在函数调用 print() 中使用 rstrip()
filename pi_digits.txtwith open(filename) as file_object:for line in file_object:print(line.rstrip()) 现在输出又与文件内容完全相同了
3.141592653589793238462643383279
四创建一个包含文件各行内容的列表 使用关键字 with 时open() 返回的文件对象只在 with 代码块内可用。如果要在 with 代码块外访问文件的内容可在 with 代码块内将文件的各行存储在一个列表中并在 with 代码块外使用该列表可以立即处理文件的各个部分也可以推迟到程序后面再处理。 下面的示例在 with 代码块中将文件 pi_digits.txt 的各行存储在一个列表中再在 with 代码块外打印
filename pi_digits.txtwith open(filename) as file_object:lines file_object.readlines()for line in lines:print(line.rstrip()) 方法 readlines() 从文件中读取每一行并将其存储在一个列表中。接下来。该列表被赋给变量 lines 。在 with 代码块外依然可使用这个变量。使用一个简单的 for 循环来打印 lines 中的各行。因为列表 lines 的每个元素都对应于文件中的一行所以输出与文件内容完全一致。
五使用文件的内容 将文件读取到内存中后就能以任何方式使用这些数据了。下面以简单的方式使用圆周率的值。首先创建一个字符串它包含文件中存储的所有数字且没有任何空格
filename pi_digits.txtwith open(filename) as file_object:lines file_object.readlines()pi_string
for line in lines:pi_string line.rstrip()print(pi_string)
print(len(pi_string)) 像前一个示例一样首先打开文件并将其中所有的行都存储在一个列表中。创建了一个变量 pi_string 用于指向圆周率的值。接下来使用一个循环将各行加入 pi_string 并删除每行末尾的换行符。打印这个字符串及其长度
3.1415926535 8979323846 2643383279
36 变量 pi_string 指向的字符串包含原来位于每行左边的空格为删除这些空格可使用 strip() 而非 Istrip()
pi_string
for line in lines:pi_string line.strip() 这样就获得了一个字符串其中包含准确到30位小数的圆周率值。这个字符串长32字符因为它还包含整数部分的3和小数点
3.141592653589793238462643383279
32 注意读取文本文件时Python 将其中的所有文本都解读为字符串。如果读取的是数并要将其作为数值使用就必须使用函数 int() 将其转换为整数或使用函数 float() 将其转换为浮点数。 六包含一百万位的大型文件 前面分析的都是一个只有三行的文本文件但这些代码示例也可处理大得多的文件。如果我们有一个文本文件其中包含精确到小数点后1000000位而不是30位的圆周率值也可创建一个包含所有这些数字的字符串。为此无须对前面的程序做任何修改只要将这个文件传递给它即可。在这里只打印到小数点后50位以免终端为显示全部1000000位而不断滚动
filename pi_million_digits.txtwith open(filename) as file_object:lines file_object.readlines()pi_string
for line in lines:pi_string line.strip()print(f{pi_string[:52]}...)
print(len(pi_string)) 输出表明创建的字符串确实包含精确到小数点后1000000位的圆周率值
3.14159265358979323846264338327950288419716939937510...
1000002 对于可处理的数据量Python没有任何限制。只要系统的内存足够多你想处理多少数据都可以。
七圆周率值中包含你的生日吗 我一直想知道自己的生日是否包含在圆周率值中。下面来扩展刚才编写的程序以确定某个人的生日是否包含在圆周率值的前1000000位中。为此可将生日表示为一个由数字组成的字符串再检查这个字符串是否包含在 pi_string 中
filename pi_million_digits.txtwith open(filename) as file_object:lines file_object.readlines()pi_string
for line in lines:pi_string line.strip()birthday input(Enter your birthday, in the form mmddyy: )
if birthday in pi_string:print(Your birthday appears in the first million digits of pi!)
else:print(Your birthday does not appear in the first million digits of pi.) 提示用户输入生日。检查这个字符串是否包含在 pi_string 中。下面来运行一下这个程序
Enter your birthday, in the form mmddyy: 030109
Your birthday appears in the first million digits of pi! 我的生日确实出现在了圆周率值中读取文件的内容后能以你能想到的任何方式对其进行分析。
二、写入文件 保存数据的最简单的方式之一是将其写人文件中。通过将输出写人文件即便关闭包含程序输出的终端窗口这些输出也依然存在:可以在程序结束运行后查看这些输出可以与别人分享输出文件还可以编写程序来将这些输出读取到内存中并进行处理。
一写入空文件 要将文本写人文件你在调用 open() 时需要提供另一个实参告诉 Python 你要写入打开的文件。为明白其中的工作原理我们来将一条简单的消息存储到文件中而不是将其打印到屏幕上
filename programming.txtwith open(filename, w) as file_object:file_object.write(I love programming.) 在本例中调用 open() 时提供了两个实参。第一个实参也是要打开的文件的名称。第二个实参 (w) 告诉 Python 要以写入模式打开这个文件。打开文件时可指定读取模式 (r) 、写入模式 (w) 、附加模式 (a) 或读写模式 (r ) 。如果省略了模式实参Python 将以默认的只读模式打开文件。 如果要写入的文件不存在函数 open() 将自动创建它。然而以写人模式 (w) 打开文件时千万要小心因为如果指定的文件已经存在Python 将在返回文件对象前清空该文件的内容。 使用文件对象的方法 write() 将一个字符串写人文件。这个程序没有终端输出但如果打开文件 programming.txt 将看到其中包含如下一行内容
I love programming. 相比于计算机中的其他文件这个文件没有什么不同。你可以打开它、在其中输人新文本、复制其内容、将内容粘贴到其中等等。 注意Python 只能将字符串写入文本文件。要将数值数据存储到文本文件中必须先使用函数 str() 将其转换为字符串格式。 二写入多行 函数 write() 不会在写人的文本末尾添加换行符因此如果写入多行时没有指定换行符文件看起来可能不是你希望的那样
filename programming.txtwith open(filename, w) as file_object:file_object.write(I love programming.)file_object.write(I love creating new games.) 如果你打开 programming.txt 将发现两行内容挤在一起
I love programming.I love creating new games. 要让每个字符串都单独占一行需要在方法调用 write() 中包含换行符
filename programming.txtwith open(filename, w) as file_object:file_object.write(I love programming.\n)file_object.write(I love creating new games.\n) 现在输出出现在不同的行中
I love programming.
I love creating new games. 像显示到终端的输出一样还可以使用空格、制表符和空行来设置这些输出的格式。
三附加到文件 如果要给文件添加内容而不是覆盖原有的内容可以以附加模式打开文件。以附加模式打开文件时Python 不会在返回文件对象前清空文件的内容而是将写人文件的行添加到文件末尾。如果指定的文件不存在Python 将为你创建一个空文件。 下面来修改 write_message.py 在既有文件 programming.txt 中再添加一些你酷爱编程的原因
filename programming.txtwith open(filename, a) as file_object:file_object.write(I also love finding meaning in large datasets.\n)file_object.write(I love creating apps that can run in a browser.\n)打开文件时指定了实参 a 以便将内容附加到文件末尾而不是覆盖文件原来的内容。又写人了两行它们被添加到文件 programming.txt 末尾
I love programming.
I love creating new games.
I also love finding meaning in large datasets.
I love creating apps that can run in a browser.最终的结果是文件原来的内容还在后面则是刚添加的内容。 未完待续……
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85933.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!