python中 if not os.path.exists(os.path.join(path, new_filename)): 这句代码为什么不执行
时间: 2024-05-31 22:06:12 浏览: 242
这句代码不执行的情况可能有以下几种:
1. 如果变量path或new_filename中的值为空或None,那么os.path.join(path, new_filename)将会返回None或空字符串,os.path.exists(None)或os.path.exists('')都是无法执行的,因此整个if语句都不会执行。
2. 如果os.path.join(path, new_filename)返回的路径已经存在,那么os.path.exists(os.path.join(path, new_filename))将返回True,if not True就会被解释器视为False,因此if语句也不会执行。
3. 如果在执行这段代码之前,程序已经打开了文件(例如用open函数),并且没有调用close方法来关闭文件句柄,那么该文件就会被操作系统锁定,导致os.path.exists返回False,从而使得if语句不执行。
4. 如果该路径在操作系统中不允许读取权限,那么os.path.exists也会返回False,同样导致if语句不执行。
如果以上情况都排除了,而该代码还是不执行的话,可能需要进一步检查代码的上下文环境。
相关问题
import cv2 import os ROOT_PATH='E:\keshe\dataset\project3\project3_data' files=os.listdir(ROOT_PATH) print("需要处理文件的总数量:",len(files)) #任务4:统一图像文件格式 DATA_PATH='E:\keshe\dataset\project3\project3_geshi4' if not os.path.exists(DATA_PATH): os.mkdir(DATA_PATH) cnt=0 for file in files: filename = os.path.join(ROOT_PATH,file) img = cv2.imread (filename,-1) if img is None: continue newfile='{:0>6d}'.format(cnt)+".jpg" cnt+=1 dst_filename=os.path.join(DATA_PATH,newfile) cv2.imwrite(dst_filename,img) print("放入DATA文件夹的文件数量:",cnt)
这段代码的作用是将指定文件夹中的图像文件转化为统一的 jpg 格式,并保存到指定文件夹中。具体实现过程如下:
1. 引入必要的库:cv2 和 os。
2. 定义 ROOT_PATH 和 DATA_PATH 分别为原始图像文件夹和处理后的图像文件夹的路径。
3. 使用 os.listdir() 函数获取原始图像文件夹中所有的文件名。
4. 使用 len() 函数统计总文件数量,并输出。
5. 判断处理后的图像文件夹是否存在,如果不存在则创建。
6. 遍历原始图像文件夹中的所有文件:
- 使用 os.path.join() 函数将文件名和路径合并为完整的文件路径。
- 使用 cv2.imread() 函数读取图像文件,-1 参数表示以原始图像的原始格式读取。
- 如果读取失败,就跳过这个文件。
- 使用 '{:0>6d}'.format(cnt) 格式化文件名,保证文件名有六位数字,不足的前面用 0 填充。
- 将 cnt 加 1,为下一个文件做准备。
- 使用 os.path.join() 函数将处理后的图像文件夹路径和新的文件名合并为完整的文件路径。
- 使用 cv2.imwrite() 函数将处理后的图像保存到指定路径。
7. 输出处理后的图像文件夹中的文件数量。
需要注意的是,Windows 系统中路径分隔符为反斜杠 (\),但是这个字符在 Python 中有特殊含义,需要使用转义字符 \ 来转义。所以在定义路径时需要使用两个反斜杠来表示一个。
@app.route('/restruct', methods=['POST']) def restruct(): dch = request.form['dch'] dch_folder = "restr" + dch count = 1 while os.path.exists(os.path.join('D:\cj', dch_folder)): dch_folder = "restr" + dch + "_" + str(count) count += 1 os.makedirs(os.path.join('D:\cj', dch_folder, 'photos')) os.makedirs(os.path.join('D:\cj', dch_folder, 'kmls')) os.makedirs(os.path.join('D:\cj', dch_folder, 'project')) photos_folder = os.path.join('D:\cj', dch_folder, 'photos') kmls_folder = os.path.join('D:\cj', dch_folder, 'kmls') project_folder = os.path.join('D:\cj', dch_folder, 'project') for file in request.files.getlist('files'): filename = file.filename file.save(os.path.join(photos_folder, filename)) dhs = request.form.getlist('dh') for dh in dhs: src_path = os.path.join(r'D:/911kml/', dh + '.xlsx.kml') dst_path = os.path.join(r'D:/cj', dch_folder, 'kmls/', dh + '.xlsx.kml') shutil.copy(src_path, dst_path) subprocess.Popen(["python", "restruct.py", dch, photos_folder, project_folder, kmls_folder])使用python3.6版本的websocket,在flask框架中将这段代码运行中的输出信息,实时发送给前端
可以使用 Flask-SocketIO 扩展来实现实时发送输出信息给前端,具体实现步骤如下:
1. 安装 Flask-SocketIO 扩展:
```
pip install flask-socketio
```
2. 在 Flask 应用程序中导入 SocketIO:
```python
from flask_socketio import SocketIO, emit
socketio = SocketIO(app)
```
3. 修改 restruct 视图函数,在执行 subprocess.Popen() 之前,发送一个消息给前端:
```python
@socketio.on('connect')
def test_connect():
emit('my_response', {'data': 'Connected'})
@app.route('/restruct', methods=['POST'])
def restruct():
dch = request.form['dch']
dch_folder = "restr" + dch
count = 1
while os.path.exists(os.path.join('D:\cj', dch_folder)):
dch_folder = "restr" + dch + "_" + str(count)
count += 1
os.makedirs(os.path.join('D:\cj', dch_folder, 'photos'))
os.makedirs(os.path.join('D:\cj', dch_folder, 'kmls'))
os.makedirs(os.path.join('D:\cj', dch_folder, 'project'))
photos_folder = os.path.join('D:\cj', dch_folder, 'photos')
kmls_folder = os.path.join('D:\cj', dch_folder, 'kmls')
project_folder = os.path.join('D:\cj', dch_folder, 'project')
for file in request.files.getlist('files'):
filename = file.filename
file.save(os.path.join(photos_folder, filename))
dhs = request.form.getlist('dh')
for dh in dhs:
src_path = os.path.join(r'D:/911kml/', dh + '.xlsx.kml')
dst_path = os.path.join(r'D:/cj', dch_folder, 'kmls/', dh + '.xlsx.kml')
shutil.copy(src_path, dst_path)
socketio.emit('my_response', {'data': 'Restructuring started'})
subprocess.Popen(["python", "restruct.py", dch, photos_folder, project_folder, kmls_folder])
return 'success'
```
4. 在前端页面中使用 SocketIO 客户端连接 Flask 服务器,并监听 my_response 事件,接收输出信息:
```html
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Test</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.1/socket.io.js"></script>
<script type="text/javascript" charset="utf-8">
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('my_response', function(msg) {
console.log(msg.data);
});
</script>
</head>
<body>
<h1>WebSocket Test</h1>
</body>
</html>
```
当视图函数执行到 subprocess.Popen() 时,会向前端发送一个消息,提示重构开始,然后在 restruct.py 脚本执行过程中,输出信息会实时发送给前端,可以通过在 restruct.py 中使用 print() 或者 sys.stdout.write() 来输出信息。
阅读全文