本文目录一览:
python中3种调用可执行文件.exe的方法
方法一、os.system()
会保存可执行程序中的打印值和主函数的返回值,且会将执行过程中要打印的内容打印出来。
import os
main = "project1.exe"
r_v = os.system(main)
print(r_v)
方法二、subprocess.getstatusoutput()
会保存可执行程序中的打印值和主函数的返回值,但不会将执行过程中要打印的内容打印出来。
import subprocess
import os
main = "project1.exe"
if os.path.exists(main):
rc, out = subprocess.getstatusoutput(main)
print(rc)
print('*' * 10)
print(out)
方法三、popen()
会保存可执行程序中的打印值,但不会保存主函数的返回值,也不会将执行过程中要打印的内容打印出来。
import os
main = "project1.exe"
f = os.popen(main)
data = f.readlines()
f.close()
print(data)
另外,上面提到的三种方式,实际上都是在 Python 中执行命令,因此它们不只是用来执行可执行文件,也可以用来执行 Linux 系统中的其他指令。
关于 Python 中 3 种调用可执行文件 .exe
的方法,环球青藤小编就和大家分享到这里了,学习是永无止境的,学习一项技能更是受益终身,所以,只要肯努力学,什么时候开始都不晚。如果您还想继续了解关于 Python 编程的学习方法及素材等内容,可以点击本站其他文章学习。
Python文件操作,看这篇就足够!
文件的存储方式
在计算机中,文件是以二进制的方式保存在磁盘上的文本文件和二进制文件。 文本文件可以使用文本编辑软件查看,本质上还是二进制文件。 二进制文件保存的内容不是给人直接阅读的,而是提供给其他软件使用的。二进制文件不能使用文件编辑软件查看。
文件基本操作
在计算机中要操作文件一共包含三个步骤:
- 打开文件
- 读、写文件
- 读:将文件内容读入内存
- 写:将内存内容写入文件
模式描述
t
:文本模式(默认)。x
:写模式,新建一个文件,如果该文件已存在则会报错。b
:二进制模式。+
:打开一个文件进行更新(可读可写)。U
:通用换行模式(不推荐)。r
:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。rb
:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。r+
:打开一个文件用于读写。文件指针将会放在文件的开头。rb+
:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。w
:打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。wb
:以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。w+
:打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。wb+
:以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。a
:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。ab
:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。a+
:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。ab+
:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 文件打开模式有很多,但我们实际用到的就只有六种。 我们总结一下主要用到的是下面六种: | 模式 | 可做操作 | 若文件不存在 | 是否覆盖文件原来内容 | |------|----------|--------------|----------------------| |r
| 只读 | 报错 | —— | |r+
| 可读、可写 | 报错 | 是 | |w
| 只写 | 创建 | 是 | |w+
| 可读、可写 | 创建 | 是 | |a
| 只写 | 创建 | 否,追加写 | |a+
| 可读、可写 | 创建 | 否,追加写 |
只读模式打开文件——只读(r)
文件若不存在报错。
读写模式打开文件——读写模式(r+)
数据写入之前: 数据写入之后: 会替换掉相同长度的内容。 文件若不存在报错。
写模式打开文件——写模式(w)
数据写入之前: 数据写入之后: 这种操作会删除原来的文件内容,重新写入 Python,并且把光标放在文件最开始。 若文件不存在,系统会创建该文件夹并重新写入内容。
读写模式打开文件——读写模式(w+)
数据写入之前:
数据写入之后:
这种操作会删除原来的文件内容,重新写入 Python,并且把光标放在文件最开始。
若文件不存在,系统会创建该文件夹并重新写入内容。
利用这个原理,所以文件写模式 (w
)、读写模式 (w+
) 还可以用作删除文件内容。
因为它们整个工作原理就是把文件原来的内容删除,然后写入新的内容。
如果我们写入的内容为空,那么不就是删除文件内容。
写模式打开文件(追加内容)——写模式(a)
数据写入之前: 数据写入之后: 可以看到是在原先内容的基础上在文末追加新的内容! 若文件不存在,系统会创建新的文件夹并写入内容。
读写模式打开文件(追加内容)——读写模式(a)
数据写入之前: 数据写入之后: 可以看到是在原先内容的基础上在文末追加新的内容! 若文件不存在,系统会创建新的文件夹并写入内容。
二进制模式打开文件
我们看到了在文件打开模式中有以下模式:rb
、wb
……有这种带 b
的。
什么意思呢?
就是用二进制的方式打开文件。
很明显,我们出现了以下错误:
主要原因是因为编码的问题,可能是因为 0x82
这个字节在 gbk 编码中没有这个字符,可能原字符是两个字节,在 gbk 里被解析成了一个字节,导致字符不存在。
这就是我们文件打开方式需要使用二进制读取的原因。
文件操作
open
函数负责打开文件,并且返回文件对象。
read
/ write
/ close
三个方法都需要通过文件对象来调用。
文件和文件夹的操作
在 Python 中文件和文件夹的操作要借助 os
模块里面的相关功能,具体步骤如下:
- 导入
os
模块 - 使用
os
模块相关功能
- 文件重命名
- 删除文件
- 创建文件夹
- 删除文件夹
- 获取当前目录
- 改变默认目录
- 获取目录列表
python对文件的独操作有哪几种?请详细说明每种方法
- 打开文件:
f = open(r'E:\PythonProjects\test7\a.txt', mode='rt', encoding='utf-8')
以上三个单引号内分别表示:要打开的文件的路径,mode
为文件打开方式(具体介绍在下文),encoding
为文件的字符编码,一般默认为 utf-8
。
2. 读写文件:
data = f.read() # 读文件
f.write() # 写文件
- 关闭文件:
f.close()
- 为了简便,一般采用上下文的方法进行文件操作,可不用关闭文件
with open('a.txt', mode='rt', encoding='utf-8') as f:
data = f.read()
print(data)
with open('a.txt', mode='wt', encoding='utf-8') as f:
f.write('hello world')
- 控制文件读写的操作:
r
(默认模式):只读。以该模式打开文件时,若文件不存在则报错;若文件存在,则文件指针在文件开头,即从文件开头开始读文件。w
:只写。以该模式打开文件时,若文件不存在则创建一个文件;如文件存在,则清空文件内容,文件指针移到开头。a
:追加写。以该模式打开文件时,若文件不存在则创建一个文件;如文件存在,则将文件指针移到文件末尾,在文件末尾写入新的内容。
- 控制文件读写内容的模式(
t
和b
都不能单独使用,必须与r
、w
、a
结合使用)
t
(默认):无论读写都是以字符为单位,只能识别文本文件,必须要指定encoding
。b
:无论读写都是以字节为单位,可以识别所有文件,一定不能指定encoding
。
- 文件的拷贝
with open('a.txt', mode='rb') as af, \
open('b.txt', mode='wb') as bf:
data = af.read()
bf.write(data)
执行程序后,打开文件,即可发现文件已成功拷贝。这里使用 b
而不是 t
模式,是因为文件有多种格式。
8. 文件的修改
文件的修改是在硬盘上实现文件的覆盖,相当于一个新的文件以旧的文件名来命名。文件的修改有两种方式,分别适用于不同的情景。
方式一(适用于容量小的文件):这种方式的原理是:创建一个新的文件,将旧文件的内容拷贝到新的文件中;这样内存里就存在两个文件,故不适用于容量大的文件,具体代码见下方:
with open('a.txt', mode='rt', encoding='utf-8') as f:
data = f.read()
data_new = data.replace('yang', 'yv')
with open('b.txt', mode='wt', encoding='utf-8') as p:
p.write(data_new)
方式二(适用于容量大的文件):此方式的原理为:读取旧文件的一行内容,修改后写到临时文件中,循环往复直到写完,然后将源文件删除,将临时文件命名为源文件名。这种方式在内存中只存在两行文件,节省内存,可用于大文件。
import os
with open('b.txt', mode='rt', encoding='utf-8') as f, \
open('.b.txt.swap', mode='wt', encoding='utf-8') as p:
for line in f:
p.write(line.replace('yv', 'yang')) # 调用 replace 方法,将源文件中的 'yv' 换成 'yang'
os.remove('b.txt')
os.rename('.b.txt.swap', 'b.txt')
- 文件的阶段:
truncate(n)
将文件中n
个字节后的内容全部删除。当n
不存在时,即删除文件全部内容。 - 文件内指针的移动
f.seek()
:指针的移动是以字节为单位的。seek
有三种模式:
0
(默认模式):指针在文件开头,只有在0
模式可以在t
模式下用,也可以在b
模式下用,而1
、2
模式只能在b
模式下使用。1
:指针在当前位置。2
:指针在文件末尾。 以下为具体示例:
# 0
with open('a.txt', mode='rt', encoding='utf-8') as f:
f.seek(3, 0)
print(f.tell()) # 指针当前位置
print(f.read()) # 从指针后读出所有内容
# 1 参照指针当前位置
with open('a.txt', mode='rb') as f:
f.read(2)
f.seek(4, 1)
print(f.tell())
print(f.read().decode('utf-8'))
# 2 参照文件末尾
with open('a.txt', mode='rb') as f:
f.seek(-5, 2)
print(f.tell())
print(f.read().decode('utf-8'))
当 seek
处于 2
模式时,可以将文件中新加入的内容打印出来,具体代码如下:
# 另一个文件进行写操作,写的代码如下:
with open('a.txt', mode='at', encoding='utf-8') as f:
f.write('hello world\n')
# 每在文件中写入新的内容,都打印出来,以下代码执行打印操作:
import time
with open('a.txt', mode='rb') as f:
f.seek(0, 2)
while True:
line = f.readline() # readline 可以读取没有内容的部分
if len(line) == 0:
time.sleep(0.1)
else:
print(line.decode('utf-8'))