如何从CSV列表中找到目录中的文件,然后将该文件移动到另一个文件夹?Python

2024-10-05 12:27:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,第一行是标题,第1(a)列是我要查找的文件名,例如I\u suck_at_Python.xlsx第2(B)列是我想把它移到的文件夹名,例如,Lex sucks at Python。在

我在Openpyxl上也做过类似的事情,只是我只在一行上做了。 下面是我的代码。感谢你的帮助。在

另外,我在编码方面遇到了很多问题,尤其是这一行:

with open(csv_file, 'r') as f:

这个文件最初是xlsx,但后来我不得不将其保存为csv。以前的'r'是'rb',然后我读到我不得不改变它和编码细节,但没有用。在

总之,下面是实际问题的代码:

^{pr2}$

代码运行,但它直接转到else语句,这意味着它不会拾取文件夹中的文件。再次感谢。在

我想我应该提一下,如果有人建议用完全不同的方式来做这件事,我很高兴,比如熊猫,纽比,openpyxl,xlrd等等

编辑:所以,我想在A2中搜索该文件,找到后将其移动到B2中的文件夹中,然后循环到下一行直到文件的结尾。文件夹已存在于与.xlsx文件相同的目录中。CSV文件中的采样线:

File Name                    Folder Name
i_suck_at_python.xlsx        Lex sucks at Python
python_test.xlsx             Python Test

Tags: 文件csv代码name文件夹标题编码文件名
1条回答
网友
1楼 · 发布于 2024-10-05 12:27:06

根据你的描述,我假设你正在尝试做以下事情:

发件人:

Test 2
└── PDFs
    ├── i_suck_at_python.xlsx
    └── python_test.xlsx

收件人:

^{pr2}$

首先,您需要在路径字符串中添加一个r前缀。这将阻止Python尝试转义任何反斜杠。或者你可以用正斜杠代替。在

当使用csv.reader()时,应该使用python3.x中的newline=''参数打开文件,而在python2.x中需要rb。在

使用in不会测试文件是否存在于给定的文件夹中,而是检查左侧的字符串是否可以在右侧的字符串中找到。要实际测试文件是否存在,可以使用^{},但如果只是为了确保可以复制它,则最好在移动过程中使用异常处理,即如果找不到该文件,则会生成异常。在

import csv
import os
import shutil

def main():
    csv_file = r"G:\Key Accounts\Ebills\Lex Bot Test\Test 2\EB Mapping.csv"
    from_folder = r"G:\Key Accounts\Ebills\Lex Bot Test\Test 2\PDFs"
    to_folder = r"G:\Key Accounts\Ebills\Lex Bot Test\Test 2\PDFs"

    with open(csv_file, 'r', newline='') as f:
        reader = csv.reader(f)

        for row in reader:
            file_name = row[0]
            folder_name = row[1]

            from_filename = os.path.join(from_folder, file_name)
            to_filename = os.path.join(to_folder, folder_name, file_name)

            try:
                shutil.move(from_filename, to_filename)
                print("Moved - '{}' -> '{}'".format(from_filename, to_filename))
            except shutil.Error as e:
                print("Failed - '{}' -> '{}'".format(from_filename, to_filename))

main()

相关问题 更多 >

    热门问题