Есть ли лучший / более чистый способ отформатировать этот скрипт - PullRequest
1 голос
/ 29 мая 2019

Я довольно новичок в python (сделал 4 скрипта для очистки папок и переместил некоторые вещи), и теперь у меня есть новый вызов.

У меня есть этот CSV-файл с данными о некоторых PDF-файлах (название PDF-файла, время его печати и т. Д.)

У меня есть следующий код atm, и все работает отлично, но я нахожу это "нечистым", и я надеюсь, что был лучший способ отформатировать некоторые вещи. Это мой код:

import csv, shutil, os

with open('\\\\fatboy.leleu.be\\Psm\\Mailing Templates\\OhGreen\\Verwerking\\OhGreen POS week 19.csv') as csvfile:
    csvReader = csv.reader(csvfile, delimiter=';')
    rows = csv.reader(csvfile)
    headers = next(rows)

    for row in csvReader:
        NAAM = row[0]
        Formaat = row[1]
        Tekstkleur = row[2]
        Gouvy = row[3]
        LouvainLaNeuve = row[4]
        Nannine = row[5]
        Tournai = row[6]
        SaintGeorges = row[7]
        Aarschot = row[8]
        Balen = row[9]
        Ekeren = row[10]
        Ninove = row[11]
        SintKatelijneWaver = row[12]
        Olen = row[13]
        Zwijndrecht = row[14]

        if Gouvy > "0":
            file = NAAM + ".pdf"
            path = ("\\\\fatboy.leleu.be\\Psm\\Mailing Templates\\OhGreen\\Verwerking\\" + Formaat + "\\" + file)
            dest = ("\\\\fatboy.leleu.be\\Psm\\Mailing Templates\\OhGreen\\Verwerking\\2print\\" + Formaat + "\\" + NAAM + "_GOUVY" + ".pdf")
            shutil.copy(path, dest)
            print(dest , " changed name and moved to ", dest)

        if LouvainLaNeuve > "0":
            file = NAAM + ".pdf"
            path = ("\\\\fatboy.leleu.be\\Psm\\Mailing Templates\\OhGreen\\Verwerking\\" + Formaat + "\\" + file)
            dest = ("\\\\fatboy.leleu.be\\Psm\\Mailing Templates\\OhGreen\\Verwerking\\2print\\" + Formaat + "\\" + NAAM + "_LOUVAIN_LA_NEUVE" + ".pdf")
            shutil.copy(path, dest)
            print(dest , " changed name and moved to ", dest)

        if Nannine > "0":
            file = NAAM + ".pdf"
            path = ("\\\\fatboy.leleu.be\\Psm\\Mailing Templates\\OhGreen\\Verwerking\\" + Formaat + "\\" + file)
            dest = ("\\\\fatboy.leleu.be\\Psm\\Mailing Templates\\OhGreen\\Verwerking\\2print\\" + Formaat + "\\" + NAAM + "_NANNINE" + ".pdf")
            shutil.copy(path, dest)
            print(dest , " changed name and moved to ", dest)

Этот код используется для каждого названия города в csv (всего 12). Я хочу найти способ сделать это чище. Как будто мне не нужно делать цикл if для каждого города и цикл для всех названий заголовков и т. Д.

Любые советы приветствуются. PS: я не буду использовать Pandas, потому что я не могу установить его должным образом, и он отлично работает уже в основном python

1 Ответ

0 голосов
/ 29 мая 2019

Прежде всего, сохраняйте строки как переменные. Кажется, вы многократно используете одну и ту же строку, поэтому, если вы сохраните ее как переменную BASE_PATH, вы можете сделать что-то вроде этого:

BASE_PATH = "\\\\fatboy.leleu.be\\Psm\\Mailing\\Templates\\OhGreen\\Verwerking\\"
path = BASE_PATH + Formaat + "\\" + file

или даже

BASE_PATH = "\\\\fatboy.leleu.be\\Psm\\Mailing\\Templates\\OhGreen\\Verwerking\\{}\\{}"
path = BASE_PATH.format(Formaat, file)

Во-вторых, вы можете хранить переменные, которые вы хотите проверить, в качестве словаря и перебирать его ключи. Например:

BASE_PATH = "\\\\fatboy.leleu.be\\Psm\\Mailing\\Templates\\OhGreen\\Verwerking\\{}\\{}"
DEST_PATH = "\\\\fatboy.leleu.be\\Psm\\Mailing\\Templates\\OhGreen\\Verwerking\\2print\\{}\\{}.pdf"
name_index_mapping = {
  "GOUVY": 3,
  "LOUVAIN_LA_NEUVE": 4,
  "NANNINE": 5
}

for (name, index) in name_index_mapping.items():
  if row[index] > "0":
    file = NAAM + ".pdf"
    path = BASE_PATH.format(Formaat, file)
    dest = DEST_PATH.format(Formaat, NAAM, name)
    shutil.copy(path, dest)
    print(path, "changed name and moved to", dest)

Наконец, вы уверены, что вам нужно сравнить значение с литеральной строкой "0", а не с числом 0? Сравнение строк с использованием логики greater/smaller than может дать неожиданные результаты.

...