对多个Python文件运行相同的代码

2024-06-01 03:31:53 发布

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


正如您所见,我已经编写了一段代码(我知道它本可以写得更好)。所以我的问题是,如何为文件夹中的多个文件运行此代码?。我可以使用“for loop”来完成此操作吗?
我的文件位于名为task1的文件夹中,老实说,我想不出执行此操作的方法。谢谢你花时间阅读

bands = list()

filename = "file1000"
with open (filename) as fin:
    for line in fin:
        bands.append(line.strip())


def partition(bands, start, end):
    pivot = bands[start]
    low = start + 1
    high = end

    while True:
        while low <= high and bands[high] >= pivot:
            high = high - 1
        while low <= high and bands[low] <= pivot:
            low = low + 1
        if low <= high:
            bands[low], bands[high] = bands[high], bands[low]
        else:
            break

    bands[start], bands[high] = bands[high], bands[start]

    return high

def quick_sort(array, start, end):
    if start >= end:
        return

    p = partition(array, start, end)
    quick_sort(array, start, p-1)
    quick_sort(array, p+1, end)


def heapify(bands, n, i):
    largest = i
    l = 2 * i + 1
    r = 2 * i + 2

    if l < n and bands[i] < bands[l]:
        largest = l

    if r < n and bands[largest] < bands[r]:
        largest = r

    if largest != i:
        bands[i], bands[largest] = bands[largest], bands[i]
        heapify(bands, n, largest)

def heapSort(bands):
    n = len(bands)


    for i in range(n, -1, -1):
        heapify(bands, n, i)


    for i in range(n - 1, 0, -1):
        bands[i], bands[0] = bands[0], bands[i]
        heapify(bands, i, 0)


def mergeSort(bands):
    if len(bands) > 1:
        mid = len(bands) // 2
        L = bands[:mid]
        R = bands[mid:]

        mergeSort(L)
        mergeSort(R)

        i = j = k = 0

        while i < len(L) and j < len(R):
            if L[i] < R[j]:
                bands[k] = L[i]
                i += 1
            else:
                bands[k] = R[j]
                j += 1
            k += 1

        while i < len(L):
            bands[k] = L[i]
            i += 1
            k += 1

        while j < len(R):
            bands[k] = R[j]
            j += 1
            k += 1


def insertionSort(bands):
    for i in range(1, len(bands)):

        key = bands[i]

        j = i - 1
        while j >= 0 and key < bands[j]:
            bands[j + 1] = bands[j]
            j -= 1
        bands[j + 1] = key

import time
start_time = time.time()
quick_sort(bands, 0, len(bands) - 1)
file = open("time.txt","a")
file.write(str(time.time() - start_time))
file.write("        ")
file.close()

start_time = time.time()
heapSort(bands)
file = open("time.txt","a")
file.write(str(time.time() - start_time))
file.write("        ")
file.close()

start_time = time.time()
mergeSort(bands)
file = open("time.txt","a")
file.write(str(time.time() - start_time))
file.write("        ")
file.close()

start_time = time.time()
insertionSort(bands)
file = open("time.txt","a")
file.write(str(time.time() - start_time))
file.write("        ")
file.close()

Tags: andforleniftimedefstartfile
2条回答

您可以使用:

d="**Provide the directory here**"
files=os.listdir(d)
file=[i[:-4] for i in files]          #To store the csv file name as DataFrame name without the '.csv' part
a=[]
for i in range(len(files)):
    exec("%s=pd.read_csv(d+files[i])"%file[i])
    a.append(file[i])

现在,您可以在“a”中查看数据帧列表。您可以对它们中的每一个进行迭代,并将其传递给您的函数

您可以使用os.listdir(folder)获取文件夹中的所有名称(它将是文件和子文件夹的名称),然后可以使用for-loop对每个文件名运行代码listdir()只提供文件名,您需要os.path.join()来创建文件的完整路径。您还可以使用if来筛选名称

import os

folder = "/path/to/assignment"

for name in os.listdir(folder): 
    if name.startswith("file"): # use it if you have to filter files by name
        filename = os.path.join(folder, name)
        print(filename)

        # ... your code ...

最终,您可以使用glob来实现这一点。如果您想筛选名称,那么它可能很有用。对于所有名称,请使用*。对于文件管理器,您可以使用ie *.txtfile*

import glob

#for filename in glob.glob("/path/to/assignment/file*.txt"):
for filename in glob.glob("/path/to/assignment/*"):
     print(filename)

     # ... your code ...

如果您还需要进入子文件夹,那么可以使用os.walk(folder)

import os

folder = "/path/to/assignment"

for root, dirs, files in os.walk(folder):
     for name in files:
         if name.startswith("file"): # use it if you have to filter files by name
             filename = os.path.join(root, name)
             print(filename)

             # ... your code ...

相关问题 更多 >