亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Mac 上使用 Python 循環遍歷子文件夾以檢查文件是否存在、打開、復制、粘貼然后關閉文件

在 Mac 上使用 Python 循環遍歷子文件夾以檢查文件是否存在、打開、復制、粘貼然后關閉文件

哈士奇WWW 2022-10-06 18:47:42
我有一個文件夾,在我的 Mac 桌面上有許多(~200)個子文件夾。一些(但不是全部)子文件夾包含一個名為“sample.csv”的 csv 文件。此外,我有一個“aggregate.csv”文件,我想將每個“sample.csv”數據的第二列復制到其中。Structure:"/Desktop/folder""/Desktop/folder/aggregate.csv""/Desktop/folder/sub-folder""/Desktop/folder/sub-folder/sample.csv"使用 Python,我如何遍歷每個子文件夾,檢查“sample.csv”是否存在,打開它,復制第二列,將此列粘貼到“aggregate.csv”文件中,關閉“sample.csv”,然后移動到下一個子文件夾?在“aggregate.csv”中,復制的數據應該向右遞增,因此它不會覆蓋之前剛剛粘貼的“sample.csv”數據。我的計算機正在使用 Excel 打開 CSV 文件,這就是我提到“第二列”的原因。非常感謝
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

$ cd ~


$ more aggregate.csv

X

X

X

X

X

X


$ more ./Desktop/folder/sub-folder/sample.csv

A,1

A,2

A,3

A,4

A,5


$ more ./Desktop/folder/sub-folder/sub-sub-folder/sample.csv

B,6

B,7

B,8

B,9


$ more ./Desktop/folder/sub-folder2/sample.csv

C,10

C,11

C,12

C,13

C,14

C,15

C,16


$ more ./Desktop/folder/sub-folder3/sub-sub-folder/sample.csv

D,17

D,18

D,19


$ python3 aggregate_samples.py ./Desktop

./Desktop/folder/sub-folder/sample.csv

./Desktop/folder/sub-folder/sub-sub-folder/sample.csv

./Desktop/folder/sub-folder2/sample.csv

./Desktop/folder/sub-folder3/sub-sub-folder/sample.csv


$ cat aggregate.csv


X,1,6,10,17

X,2,7,11,18

X,3,8,12,19

X,4,9,13,

X,5,,14,

X,,,15,

,,,16,

這是完成此操作的代碼。您需要的關鍵技術:os.walk()遞歸搜索文件夾、csv讀取文件的模塊sample.csv(并獲取第二列)、累積樣本的列表以及csv再次寫出結果。我假設您的sample.csv文件將具有不同的長度,因此代碼會處理它(通過預先分配一個稀疏矩陣)。


這假設您的數據集足夠小以適合內存。如果沒有,那么需要做更多的工作。


# aggregate_samples.py

import os

import sys

import argparse

import csv


def main(options):

    columns = []


    try:

        # Load in aggregate.csv, if there is one.

        with open('aggregate.csv') as f:

            column = [line.rstrip('\n') for line in f]

            columns.append(column)

    except FileNotFoundError:

        # Doesn't exist; create it later.

        pass


    longest_sample = 0

    for d, subdirs, files in os.walk(options.directory):

        subdirs.sort()

        for filename in files:


            if filename == 'sample.csv':

                file_path = os.path.join(d, filename)

                print(file_path)


                samples = []

                with open(file_path) as f:

                    reader = csv.reader(f, delimiter=',')

                    # Get the 2nd column.

                    for sample in reader:

                        samples.append(sample[1])

                longest_sample = max(longest_sample, len(samples))

                columns.append(samples)


    # Pre-fill a transpose matrix according to number of columns

    # and longest colum.

    a = [ [ '' for i in columns ] for j in range(longest_sample) ]


    # Move samples into matrix, transposing as you go.

    for i in range(len(columns)):

        for j in range(len(columns[i])):

            a[j][i] = columns[i][j]


    # Output matrix as CSV.

    with open('aggregate.csv', 'w+') as aggregate:

        writer = csv.writer(aggregate, delimiter=',')

        writer.writerows(a)


    return 0


if __name__ == '__main__':

    parser = argparse.ArgumentParser()

    parser.add_argument(

        'directory',

        help='Directory path.')

    options = parser.parse_args()

    sys.exit(main(options))


查看完整回答
反對 回復 2022-10-06
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

您可以在此處script獲取有關該軟件包的所有信息。

以下是如何使用 Packages->Script->Configure Script 設置 Program 參數:

http://img1.sycdn.imooc.com//633eb281000199ae08030524.jpg

http://img1.sycdn.imooc.com//633eb28a0001ca5306120285.jpg

查看完整回答
反對 回復 2022-10-06
  • 2 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號