【问题标题】:Python: Moving csv files after readingPython:阅读后移动 csv 文件
【发布时间】:2021-04-14 04:25:39
【问题描述】:

我想在阅读后移动 .csv 文件。

我想出的代码是将文件夹中的所有 .csv 文件移动到存档文件夹中。

src1 = "\\xxx\xxx\Source Folder"
dst1 = "\\xxx\xxx\Destination Folder"
for root, dirs, files in os.walk(src1):
    for f in files:
        if f.endswith('.csv'):
            shutil.move(os.path.join(root,f), dst1)

注意:我在代码开头导入了shutil。

注意 2:目标存档文件夹位于源文件夹中 - 这会对上述代码有影响吗?

当我运行它时,什么也没有发生。我没有收到任何错误消息,并且文件保留在源文件夹中。

感谢任何见解。

编辑(我的目标的一些背景): 我的整体代码将用于读取用户手动移动到源文件夹中的 .csv 文件 - 然后我想在使用数据后使用 Python 归档这些 .csv 文件。用户放置到源文件夹中的每个 .csv 文件都有不同的名称 - 没有 .csv 文件名相同,这就是为什么我要在源文件夹中搜索 .csv 文件并将它们全部移动。

【问题讨论】:

  • 文件是 CSV 文件有区别吗?无论如何,如果您提取minimal reproducible example 会有所帮助,因为上述代码有几个地方可能会失败。作为这里的新用户,也请带上tour并阅读How to Ask

标签: python csv move shutil


【解决方案1】:

您可以使用 pathlib 模块。我假设您在目标目录中有相同的文件夹结构。

from pathlib import Path

src1 = "<Path to source folder>"
dst1 = "<Path to destination folder>"

for csv_file in Path(src1).glob('**/*.csv'):
    relative_file_path = csv_file.relative_to(src1)
    destination_path = dst1 / relative_file_path
    csv_file.rename(destination_path)

说明-

for csv_file in Path(src1).glob('**/*.csv'):

glob(返回生成器对象)将捕获目录以及子目录中的所有 CSV 文件。现在,我们可以逐个遍历文件了。

relative_file_path = csv_file.relative_to(src1)

所有 csv_files 现在都是 pathlib 路径对象。因此,我们可以使用库提供的功能。一个这样的函数是相对的。这里它将从 src 文件夹中复制文件的相对路径。假设您有一个 CSV 文件,例如-

scr_folder/A/B/c.csv - 它会复制 A/B/c.csv

destination_path = dst1 / relative_file_path

由于文件夹结构相同,目标路径现在变为 -

dst_folder/A/B/c.csv

csv_file.rename(destination_path)

最后,重命名只会将文件从 src 移动到目标。

【讨论】:

  • 这最终没有奏效。没有错误消息,但文件没有移动到存档文件夹。
【解决方案2】:

经过大量研究,我找到了解决方案:

import shutil

source = r"\\xx\Source"
destination = r"\\xx\Destination"

files = os.listdir(source)

for file in files:
    new_path = shutil.move(f"{source}/{file}", destination)
    
print(new_path)

我让它变得比它需要的更复杂 - 因为文件夹中的所有文件无论如何都是 .csv,我只需要移动所有文件。感谢 stackoverlfow。

【讨论】:

    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多