为什么我的代码会创建另一个文本文件?

Why does my code create another text file?

提问人:Elias Dierks 提问时间:4/7/2023 更新时间:4/7/2023 访问量:37

问:

我目前正在努力扩展我的 Python 知识,并为此编写了一个生成器。但是,我必须意识到,一旦我想从文本文件的一行中删除生成的条目,就会创建另一个文本文件,然后从中删除它。这是代码,希望有人能帮忙。此致敬意。

import discord
from discord.ext import commands


import os
import asyncio

from server import stay_alive
intents = discord.Intents.default()
intents.message_content = True

path = os.path.join(os.getcwd(), "data")

# Pfad zur Netflix-Textdatei
netflix_file = os.path.join(path, "Netflix.txt")
prime_file = os.path.join(path, "Prime.txt")
nitro_file = os.path.join(path, "Nitro.txt")

def load_data(filename):
    with open(filename) as f:
        data = [line.strip() for line in f]
    return data

def save_data(filename, data):
    with open(filename, 'w') as f:
        for item in data:
            f.write(f"{item}\n")
          
netflix_data = load_data(netflix_file)
prime_data = load_data(prime_file)
nitro_data = load_data(nitro_file)

# Discord-Bot einrichten




bot = commands.Bot(command_prefix='!',intents=intents)

@bot.command()
async def gen(ctx):
   
     # Liste der Kategorien und Anzahl der Einträge erstellen
    categories = {
        "Netflix": len(netflix_data),
        "Prime": len(prime_data),
        "Nitro": len(nitro_data)
    }
    categories_str = "\n".join([f"{k}: {v}" for k, v in categories.items()])
  
  
  
  # Nachricht an den Absender senden
  
    channel = bot.get_channel(1092443991053697105) # ID des Kanals
  
    await channel.send(f"{ctx.author.mention}, welche Kategorie möchtest du? Hier sind die verfügbaren Kategorien und die Anzahl der Einträge in jeder Kategorie:\n{categories_str}")


    # Funktion zum Abfangen von Antworten definieren
    def check(message):
        return message.author == ctx.author

    # Antwort des Absenders abfangen
    try:
        category = await bot.wait_for('message', timeout=30.0, check=check)
    except asyncio.TimeoutError:
        await ctx.author.send("Zeit abgelaufen, bitte versuche es erneut.")
        return

    # Überprüfen, ob die ausgewählte Kategorie gültig ist
    category = category.content.lower()
    if category not in ["netflix", "prime", "nitro"]:
        await ctx.send("Ungültige Kategorie, bitte versuche es erneut.")
        return

    # Daten für die ausgewählte Kategorie abrufen
    if category == "netflix":
      
        data = netflix_data
        filename = "Netflix.txt"
      
    elif category == "prime":
      
        data = prime_data
        filename = "Prime.txt"
    else:
      
        data = nitro_data
        filename = "Nitro.txt"
  
     # Überprüfen, ob es Einträge für die ausgewählte Kategorie gibt
    if len(data) == 0:
        await ctx.send(f"Entschuldigung, es gibt keine Einträge in der Kategorie {category}.")
        return
  
    # Eine zufällige Zeile aus den Daten auswählen
    import random
    item = random.choice(data)

    # Nachricht mit dem ausgewählten Element an den Absender senden
    await ctx.author.send(item)

    # Das ausgewählte Element aus den Daten entfernen
    data.remove(item)
  
   
    save_data(filename, data)

stay_alive()
bot.run(os.environ['Discord_Token'])

我尝试了很多,但没有任何帮助。我希望删除已经存在的文本文件的一行,以便机器人即使在重新启动后也不会恢复条目。

python 文件 文本 生成器

评论

3赞 jasonharper 4/7/2023
您正在使用名为“data”的子目录中的路径名进行调用。您使用裸文件名进行调用,该文件名将引用当前工作目录中的文件。这些根本不是相同的文件。load_data()save_data()

答: 暂无答案