【发布时间】:2023-07-04 14:39:01
【问题描述】:
我有一个 csv 文件,第 1 行是标题,第 1(A) 列是我要查找的文件名,例如i_suck_at_python.xlsx 和第 2(B) 列是我要将其移动到的文件夹名称,例如Lex 不擅长 Python。
我在 Openpyxl 上做过类似的事情,除了我只设法在一行上做。 下面是我的代码。感谢您的帮助。
另外,我在编码方面遇到了很多问题,尤其是这一行:
with open(csv_file, 'r') as f:
该文件最初是 xlsx,但后来我不得不将其保存为 csv。 'r' 之前是 'rb',然后我读到我必须更改它以及编码细节,但无济于事。
无论如何,这是实际问题的代码:
import csv
import os
import shutil
def main():
csv_file = "G:\Key Accounts\Ebills\Lex Bot Test\Test 2\EB Mapping.csv"
existing_path_prefix = "G:\Key Accounts\Ebills\Lex Bot Test\Test 2\PDFs"
new_path_prefix = "G:\Key Accounts\Ebills\Lex Bot Test\Test 2\PDFs"
with open(csv_file, 'r') as f:
reader = csv.reader(f)
for row in reader:
file_name = row[0]
folder_name = row[1]
newFolderPath = os.path.join("G:\Key Accounts\Ebills\Lex Bot
Test\Test 2\PDFs", folder_name)
existingFilePath = os.path.join("G:\Key Accounts\Ebills\Lex Bot
Test\Test 2\PDFs", file_name)
if file_name in existing_path_prefix:
print ("File Exists in: {}".format (existing_path_prefix))
shutil.move(existingFilePath, newFolderPath)
print ("File successfully moved")
break
else:
print ("There has been a problem")
main ()
代码运行,但它只是直接进入我的 else 语句,这意味着它没有拾取文件夹中的文件。再次感谢。
我想我应该提一下,如果有人建议以完全不同的方式处理这件事,我很高兴,例如Pandas、numpy、openpyxl、xlrd 等
编辑:所以,我想在 A2 中搜索文件,找到后将其移动到 B2 中的文件夹,然后循环到下一行直到文件末尾。文件夹已与 .xlsx 文件存在于同一目录中。 CSV 文件中的示例行:
File Name Folder Name
i_suck_at_python.xlsx Lex sucks at Python
python_test.xlsx Python Test
【问题讨论】:
-
请edit您的问题,以确保缩进对于您提供的代码绝对正确。例如它应该在函数内部缩进。
-
道歉,现在添加。感谢您的提醒。
-
缩进错误。
else应该与if有相同的缩进。另外..您是否尝试使用调试器调试代码? -
我猜这整个 if-else 应该在 for 循环中。该字符串也是不可解释的。我在这里看到的程序甚至不应该开始运行。
-
嗨@StefanFalk。我再次修正了缩进(抱歉,在这里把这个问题弄得有点乱——让我们把它归咎于我是新人)。 if-else 在循环内。我已经使用了调试器,但我真的不知道我在寻找什么。事后看来,我不应该在没有做进一步研究的情况下发帖。抱歉浪费时间!