爲什麽報錯import os # 文件名 filename = "當天log抓取.txt" # 获取当前工作目录 current_dir = r"D:\Python文檔" # 遍历当前工作目录及其子目录,查找文件 for root, dirs, files in os.walk(current_dir): if filename in files: # 如果找到了文件,打开它 with open(os.path.join(root, filename), 'r') as file: content = file.read() print(content) break else: # 如果没有找到文件,输出错误信息 print(f"Error: File '{filename}' not found.")
时间: 2024-02-25 13:56:25 浏览: 110
你的代码中报错可能是因为文件名包含中文字符,而在 Windows 操作系统中,文件名中的中文字符会被编码成 GBK 码,而不是 Unicode 码。因此,你需要在代码中指定文件名的编码格式为 GBK,例如:
```python
import os
# 文件名
filename = "當天log抓取.txt"
# 获取当前工作目录
current_dir = r"D:\Python文檔"
# 遍历当前工作目录及其子目录,查找文件
for root, dirs, files in os.walk(current_dir):
if filename.encode('gbk') in files:
# 如果找到了文件,打开它
with open(os.path.join(root, filename), 'r', encoding='gbk') as file:
content = file.read()
print(content)
break
else:
# 如果没有找到文件,输出错误信息
print(f"Error: File '{filename}' not found.")
```
在代码中,我们使用 `filename.encode('gbk')` 将文件名编码成 GBK 码,然后在查找文件时使用 GBK 码进行匹配。在打开文件时,我们也需要指定文件的编码格式为 GBK。这样,就可以避免因文件名中包含中文字符而导致的编码错误。
相关问题
import osimport shutil# 遍历指定目录下的所有文件和子文件夹def traverse_dir(root_dir): for subdir, _, files in os.walk(root_dir): for file in files: file_path = os.path.join(subdir, file) # 获取文件名和后缀 file_name, file_ext = os.path.splitext(file) # 创建同名文件夹(如果不存在) target_dir = os.path.join(subdir, file_name) if not os.path.exists(target_dir): os.mkdir(target_dir) # 移动文件到同名文件夹 shutil.move(file_path, os.path.join(target_dir, file))if __name__ == '__main__': traverse_dir('/path/to/root/dir')
这段代码的作用是遍历指定目录下的所有文件和子文件夹,将同名文件移动到同名文件夹中。具体来说,它会先遍历目录下的所有文件和子文件夹,对于每个文件,它会获取文件名和后缀,然后创建同名文件夹(如果不存在),最后将文件移动到同名文件夹中。如果你执行这段代码时将`/path/to/root/dir`替换为实际的目录路径,它就会对该目录及其子目录进行上述操作。
解释下面代码:import os from config import paras para = paras() def revise_rawdata_name(para): op_dir = para.rawdata_dir save_dir = para.save_dir classes = os.listdir(op_dir) # 获取文档内所有文件 for class_name in classes: i = 1 con_dir = os.path.join(op_dir, class_name) save_path = os.path.join(save_dir, class_name) files = os.listdir(con_dir) #获取文档内所有文件 for file_name in files: # 取出路径父文件夹下各文件名 newname = f'{i:05}' (filename, extension) = os.path.splitext(file_name) str = filename.replace(filename,newname) os.rename(os.path.join(con_dir, file_name), os.path.join(save_path, str + extension)) # 添加前缀 i = i+1 def revise_name(para): ip_dir = para.rawdata_dir classes = os.listdir(ip_dir) # 获取文档内所有文件 for class_name in classes: con_dir = os.path.join(ip_dir, class_name) files = os.listdir(con_dir) #获取文档内所有文件 i = 0 for file_name in files: # 取出路径父文件夹下各文件名 (filename, extension) = os.path.splitext(file_name) newname = class_name +'_'+ str(i) os.rename(os.path.join(con_dir, file_name), os.path.join(con_dir, newname + extension)) # 添加前缀 i = i+1 # Press the green button in the gutter to run the script. if __name__ == '__main__': revise_name(para)
这段代码主要是用于修改文件名的函数。代码首先导入了`os`模块和一个名为`paras`的配置文件。然后定义了两个函数`revise_rawdata_name`和`revise_name`,并传入了一个参数`para`。
`revise_rawdata_name`函数的作用是将指定目录下的文件名进行修改,添加前缀。具体步骤如下:
1. 获取指定目录下的所有文件夹。
2. 遍历每个文件夹,获取文件夹路径。
3. 创建保存修改后文件的目录路径。
4. 获取当前文件夹下的所有文件。
5. 遍历每个文件,获取文件名和扩展名。
6. 根据计数变量`i`生成新的文件名。
7. 使用`os.rename`函数将原文件移动到新的保存目录,并添加前缀。
`revise_name`函数的作用是将指定目录下的文件名进行修改,添加前缀。具体步骤如下:
1. 获取指定目录下的所有文件夹。
2. 遍历每个文件夹,获取文件夹路径。
3. 获取当前文件夹下的所有文件。
4. 遍历每个文件,获取文件名和扩展名。
5. 根据文件夹的名称和计数变量`i`生成新的文件名。
6. 使用`os.rename`函数将原文件移动到同一目录,并添加前缀。
最后,在主程序中调用了`revise_name`函数,并传入了参数`para`来执行文件名修改操作。
阅读全文