如何在csv.writer中使用无分隔符?

r6vfmomb  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(163)

我在python中创建了一个discord bot,我想为warn命令创建一个日志系统,为了设置这个,我使用了一个.csv文件,在这个文件中我写了我想要的关于用户的所有信息。
这是我第一次使用.csv,所以为了操作数据,我把文件的内容转换成列表的列表。一个子列表=表的一行。
处理后,我把每个子列表中的所有元素并排排列,中间用“;“以将其正确存储在.csv文件中。
我的问题来自于:

csvwriter = csv.writer(wfile, delimiter=";")

对于最终文件中的每个字符,使用“;“放在"so”后面,而不是“this”:(abc;def;ghi),我有这个:(a;B;c;d;......)。
所有的代码:

@commands.command()
    @commands.has_any_role(765280296781742090, 765609632482721852, 882222368976670772)
    async def test(self, ctx, member:discord.Member):

        messages = await ctx.channel.history(limit = 1).flatten()
        for each_message in messages:
            await each_message.delete()

        with open("ressources/logs/warn_logs.csv", 'r', newline='') as csvfile:

            content = []
            new_registrated = []

            is_registrated = False

            for line in csvfile:
                line = line.split(";")
                content.append(line)

            for cell in content:
                if cell == content[0]:
                    pass
                else:
                    if int(cell[0]) == int(member.id):
                        is_registrated = True
                        cell[3] = int(cell[3])+1
                        cell[3] = str(cell[3])
                    
            if is_registrated == False:

                new_registrated.append(str(member.id))
                new_registrated.append(str(member._user))
                new_registrated.append(member.nick)
                new_registrated.append("1\r\n") 

                content.append(new_registrated)

            with open("ressources/logs/warn_logs.csv", 'w', newline='') as wfile:
                csvwriter = csv.writer(wfile, delimiter=";")
                
                # for line in content:
                #     print(line)
                #     line = ";".join(line)
                #     print(line)
                #     csvwriter.writerow(line)

                csvwriter.writerow("abc")
                

            wfile.close()

        csvfile.close()

我有什么:

我想要的:

我现在正在做这件事,如果有人能帮助我,我将非常感激。
注:我是法国人,我的英语并不完美,所以不要犹豫,纠正我
我竭力想:

  • 未放分隔符:“;”变成了“”,
  • 放置分隔符=“smth”/ =False / =无:它不工作
  • 任何其他字符:“;”变成了任何其他字符
mnemlml8

mnemlml81#

writerow()函数需要一个可迭代对象来写入一整行。

csvwriter.writerow("abc")

将写入文件:

a;b;c

csvwriter.writerow(["abc", "def"])

将写:

abc;def

如果line是一个字符串列表,那么line = ";".join(line)是错误的,line应该直接转到writerow()。在中使用csv模块的要点不是考虑分隔符。
同样,如果您使用的是with open(...) as f:,则不必关闭该文件。

相关问题