Почему мой файл не найден и поэтому всегда будет воссоздан? - PullRequest
0 голосов
/ 16 октября 2018

Я хочу найти определенный файл CSV в моем каталоге по умолчанию.Если файл найден, дело сделано, и содержимое должно быть добавлено к файлу, в противном случае файл должен быть создан.

    def set_defaultfile(self):

        file = "C:/Users/PycharmProjects/MindNotez/"
        df_content = {"title": [], "author": [], "year": [], "others": [], "note": []}
        for file in os.listdir(file):
            if file.endswith("Note.csv"):
                file_content = file + "Note.csv"
                return file_content
            else:
                df = pd.DataFrame(data=df_content)
                df.to_csv(file + "Note.csv", sep=",", index=False)
                file_content = file + "Note.csv"
                return file_content

Я использую операторы return, чтобы переменная могла использоваться другимифункции.Я искал лучшую функцию «поиска» для файла, но нашел только, как искать все файлы с определенным «концом» (например, «.txt»).

Результат этой функции такжене создание файла с именем «Note.csv», но файл всегда называется «.ideaNote.csv».Может кто-нибудь объяснить мне, что или почему этот префикс?

Как всегда, большое спасибо за ваши ответы!

С уважением,

Алекс

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Относительно приложенного .idea Я не уверен, почему, но я предполагаю, что проблема заключается в том, что существует файл или папка с именем .idea, которая берется в качестве префикса.Давайте объясним, почему я думаю, что это то, что происходит.Представьте, что в папке есть только файл с именем .idea , тогда цикл for пройдет только один раз (как мы предполагали, что в папке больше нет элементов), что приведет к file = '.idea', поэтому if() терпит неудачу и переходит к другому.

Проблема в том, что, поскольку вы использовали одно и то же имя для пути и для элемента в цикле, Python выбирает второе, а не первое.Тогда внутри части else у нас будет:

file_content = file + "Note.csv"

, и это эквивалентно

file_content = ".idea" + "Note.csv"

не так, как вы ожидали.Чтобы решить эту проблему с помощью старой версии кода, используйте это (я закомментировал исходные строки кода, которые я модифицировал):

# file = "C:/Users/PycharmProjects/MindNotez/"
file_path = "C:/Users/PycharmProjects/MindNotez/"
    df_content = {"title": [], "author": [], "year": [], "others": [], "note": []}
    # for file in os.listdir(file):
    for file in os.listdir(file_path):
        if file.endswith("Note.csv"):
            # file_content = file + "Note.csv"
            file_content = file_path + "Note.csv"
            return file_content
        else:
            df = pd.DataFrame(data=df_content)
            # df.to_csv(file + "Note.csv", sep=",", index=False)
            df.to_csv(file_path + "Note.csv", sep=",", index=False)
            file_content = file + "Note.csv"
            return file_content

Попробуйте, чтобы проверить, верна ли моя догадка.Я надеюсь, что это помогло решить сомнение.

0 голосов
/ 18 октября 2018

Я сам нашел удовлетворительное решение.

Вместо этого я использую этот код:

    def set_defaultfile(self):

        file = "C:/Users/PycharmProjects/MindNotez/Note.csv"
        df_content = {"title": [], "author": [], "year": [], "others": [], "note": []}
        try:
            with open(file, "r") as test:
                f_reader = csv.DictReader(test, delimiter=',')
                headers = f_reader.fieldnames
                if  headers == df_content:

                print("Headers match!")
        except FileNotFoundError:
            print("File created!")
            with open(file, "a+") as f:
                f_writer = csv.DictWriter(f, fieldnames=df_content)
                f_writer.writeheader()
                f.close()

        file_content = "C:/Users/PycharmProjects/MindNotez/Note.csv"
        return file_content

Однако, Мне все еще интересно, почему файл с префиксом '.idea'создается в моем первом варианте .

...