【问题标题】:write csv file with double quotes for particular column not working为特定列写带有双引号的csv文件不起作用
【发布时间】:2014-09-23 06:41:41
【问题描述】:

我正在尝试使用 python csv writer 编写一个 csv 文件。

其中一个列值包含在 "" [双引号] 例如: 'col1' 'col2' "test",当我在写字板中打开文件时,单词 test 应该是 "test" 但实际结果是 """test"""

有人可以指导这个问题。

我试用的 sn-p 示例:

csvReader = csv.reader(iInputFile)
writer = csv.writer(open('one_1.csv', 'wb'), delimiter=',', lineterminator='\r\n')

for row in csvReader:
     rawRow = []
     rawRow.append('31-7-2014') #Appending Date
     rawRow.append(row[0])   #Appending data
     rawRow.append('\"'+'test'+'\"') 
     writer.writerow(rawRow)

【问题讨论】:

    标签: python python-2.7 csv double-quotes


    【解决方案1】:

    可能你需要使用参数 quoting 和 escapechar。

    例如修改后的代码

    csvReader = csv.reader(iInputFile)
    writer = csv.writer(open('one_1.csv', 'wb'), delimiter=',', lineterminator='\r\n', quoting=csv.QUOTE_NONE, escapechar='\\')
    
    for row in csvReader:
         rawRow = []
         rawRow.append('31-7-2014') #Appending Date
         rawRow.append(row[0])   #Appending data
         rawRow.append('\"'+'test'+'\"') 
         writer.writerow(rawRow)
    

    会产生这样的输出:

    31-7-2014,'col1',\"test\"
    

    【讨论】:

    • 感谢您的回复,但我只想要双引号中的字符串。没有任何其他字符,甚至没有空格。
    【解决方案2】:

    试试这个

    f_writ = open('one_4.csv', 'wb')
    csvReader = csv.reader(iInputFile)
    writer = csv.writer(f_writ, delimiter=',',
                    lineterminator='\r\n',
                    quotechar = "'"
                    )
    
    for row in csvReader:
    
        writer.writerow(['31-7-2014',row[0],'\"text\"'])
    
    f_writ.close()
    

    我也觉得这个链接非常有用 http://pymotw.com/2/csv/,例子很多

    【讨论】:

    • 感谢您的链接,非常有用。您的代码完全按照我的意愿工作。但是请您解释一下,以便我更好地理解。非常感谢。 :)
    【解决方案3】:

    据我从@GiovanniPi 接受的答案中可以看出,默认是

    quotechar= '"'
    

    因为预期的输出已经有双引号,所以必须改为:

    quotechar = "'"
    

    如果你需要单引号和双引号,我不确定你会怎么做,因为 quotechar 需要一个 1 字符的字符串

    【讨论】:

      【解决方案4】:

      更一般地说,如果您需要将 CSV 文件的每一列都用双引号括起来

      with open('Data/with_quotes.csv', 'wt') as fr:
          csv_writer = csv.writer(fr, quoting=csv.QUOTE_ALL)
          
          with open('without_quotes.csv', 'rt') as f:
              csv_reader = csv.reader(f, skipinitialspace=True, doublequote=False)
      
              for row in csv_reader:
                  csv_writer.writerow(row)
      

      【讨论】:

        猜你喜欢
        • 2014-04-22
        • 1970-01-01
        • 2016-03-04
        • 2017-06-13
        • 1970-01-01
        • 2011-02-14
        • 2014-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多