当前位置: 首页 > 知识库问答 >
问题:

我的CSV编写器代码在字符之间写入分隔符,而不是字符串

易烨磊
2023-03-14

我已经编写了代码,可以写入CSV文件,从另一个文件读取。我想从输入文件中写出特定的列,所以我将它们附加到一个列表中,然后用逗号分隔并将它们添加到行中,但输出文件显示各个单词的字符也用逗号分隔。我只想把单词分开,不想把字符分开。

import csv
def csv_reader(file,path):
    with open(path, 'w') as f1, open(file, 'r') as f2:
        write = csv.writer(f1, delimiter=',')
        read  = csv.reader((line.replace('\0','') for line in f2), delimiter="\t")
        i=1
        for row in read:
            if(len(row)==0):
                continue
            if(row[3]=="Trade"):
                continue
            else:
                if(row[6]==""):
                    r = [row[0],row[0],'A',row[8],row[9],row[0]]
                    line = ','.join(r)
                    print(line)
                    write.writerow(line)
                else:
                    r = [row[0],row[0],'B',row[6],row[7],row[0]]
                    line = ','.join(r)
                    print(line)
                    write.writerow(line)
if __name__ == "__main__":
    path = "sales.csv"
    csv_path = "FlowEdge-TRTH-Time_Sales.csv"
    csv_reader(csv_path,path)

这显示输出如下:

    0,7,0,0,4,5,0,0,0,0,C,8,.,H,K,",",0,7,0,0,4,5,0,0,0,0,C,8,.,H,K,",",B,",",5,.,7,",",4,",",0,7,0,0,4,5,0,0,0,0,C,8,.,H,K

而它应该是这样的:

    0700450000C8.HK,0700450000C8.HK,B,5.7,4,0700450000C8.HK

当我进行以下修改时

   write.writerow([line])

它在Excel文件的一列中显示完整的字符串,这意味着只有一列,而我想要6列。

共有3个答案

慕高格
2023-03-14

如果您只想从一个中读取特定的列集。csv文件并将其输出到另一个文件,您可以尝试使用pandas模块。

import pandas as pd

data = pd.read_csv('to_load.csv', usecols=['col1', 'col2'])
data.to_csv('to_save.csv', index=False)

它首先将csv加载到名为data的变量。只有在usecols中定义的列才能导入。您可以根据列的名称或索引引用列(例如,您可以使用COLS=[0,1,2]-这将导入前3列)。

然后,借助于,可以将变量轻松地再次保存到csv文件中。到csv方法。

施恩
2023-03-14

要在csv文件中写入行,应在括号中包含每个字符串。因此,如果您使用的是csvwriter。writerrow()对象如果您有类似“first\u name”的字符串,则应在该字符串周围使用括号,以避免csv文件中每个字符之间出现“,”。

csvwriter.writerow(['first_name'])

此外,如果您想写入多行,请使用嵌套括号,如下所示:

csvwriter.writerows([['first_name'],['last_name']])
方权
2023-03-14

问题就在这里:

line=','.join(r)
print(line)
write.writerow(line)

Writerow方法需要列列表。它将在列之间添加逗号(并引用或转义任何需要它的内容,等等)。

但是你没有给它一个列列表;你给它一个字符串。这就是','. connect(r)所做的:将列列表转换为一个逗号分隔的字符串。

当您给Writerow一个字符串时,它会将字符串视为字符序列。(这不是csv特有的;在Python中,字符串是字符序列。)所以它将每个字符视为一列,并在它们之间添加逗号。

只需这样做:

write.writerow(r)
 类似资料:
  • 问题内容: 我不确定要如何处理此错误。我认为这与需要添加.encode(’utf-8’)有关。但是我不确定这是否是我需要做的,也不是应该在哪里应用。 错误是: 这是我的python脚本的基础。 问题答案: Python 2.x CSV库已损坏。您有三个选择。按照复杂度的顺序: 编辑:请参见下文 使用固定库 https://github.com/jdunck/python-unicodecsv( )

  • 本文向大家介绍手写代码:字符串逆序相关面试题,主要包含被问及手写代码:字符串逆序时的应答技巧和注意事项,需要的朋友参考一下 参考回答:  

  • 问题内容: 我正在制作一种方法来读取整个类代码并对其进行一些处理。 我想要做的是获取方法的名称,并使用它创建一个字符串。 像removeProduct这样的东西 我将创建一个字符串“删除产品” 在大写情况下如何拆分名称方法?如何用每个单词的第一个字母作为大写字母来构建这个新字符串?我正在使用子字符串,是否有更简便更好的方法呢? ps:我确定我的巴西英语对标题没有帮助。如果有人能让它看起来更好,我将

  • 我必须删除python中以开头和以结尾的字符串(例如,我必须用空字符串替换字符串)。但这里的问题是它可以从三个或四个或任意数量的开始。我尝试使用regex。但是当它在上运行时,它将作为输出而不是空字符串。你能给我一些建议吗?

  • 问题内容: 我正在尝试在我的java类中编写几行HTML,该HTML行从另一个API获取一些数据。我以JSON字符串形式获取数据,然后将其显示在网页上。 要创建HTML,我尝试: 但是最终显示的是html标签的字面解释。有没有一种方法可以创建此字符串,以便标记将保留为标记而不是转义字符? Java类是托管bean,因此在html中,我具有: 其中fullLeadData是带有html的字符串。 问

  • 我想显示一个项目列表,并使用“.” 我对此进行了研究,发现RecyclerView有一个内置的ItemDecoration功能。然而,我只能找到如何画一条线: 从我所看到的,您必须为此使用可绘制的,并且隐藏最后一个分隔符仍然不是很方便。 我发现的另一个选项是在RecyclerView的适配器内创建异构布局:https://guides.codepath.com/android/Heterogeno