【问题标题】:python csv writter adds extra quotespython csv writer添加了额外的引号
【发布时间】:2016-09-05 12:38:57
【问题描述】:

我正在使用 csv 编写器来创建 txt 文件。 合并列表时会添加额外的引号。 (分隔符 \t)

我在插入之前的最终列表是

['20160501-20160531', '719', '1-4', '(1\t1\t12:00-19:00\t1)', '(1\t1\t12:00-19:00\t1)&(2\t1\t01:00-06:00\t2)']

写入文件时我得到了这个

20160501-20160531   719 1-4 "(1 1   12:00-19:00 1)" "(1 1   12:00-19:00 1)&(2   1   01:00-06:00 2)"

为什么会有多余的引号?

一切都很好(制表符分隔和全部)除了额外的引号会导致问题

我尝试使用 quoting = csv.QUOTE_NONE 但我只收到未设置 escapechar 的错误

这是我的代码

 for rec in formJson['presentDays']:
        period = '%s-%s'% (scheduleS, scheduleE)
        if not rec['workers']:
            continue
        else:
            workers = ' '.join(str(e) for e in rec['workers'])
            for rr in rec['data']:
                range = '%s-%s' %(rr['loadFrom'],rr['loadTo'])
                #prva vrstica v subdata je condition
                request = rr['subdata'][0]
                request_days = ' '.join(str(x) for x in request['days'])
                request_works = str(request['works'])
                request_time = '%s-%s' %(request['timeFrom'],request['timeTo'])
                request_how = str(request['how'])
                request_row = "(" + request_days + '\t'+ request_works + '\t'+ request_time + '\t'+ request_how + ")"

                #gremo vse nasledne zapise, ki so condition
                itersubdata = iter(rr['subdata'])
                next(itersubdata)
                conditions_rows = []
                for r in itersubdata:
                    condition_days = str(r['days'][0])
                    condition_works = str(r['works'])
                    condition_time = '%s-%s' %(r['timeFrom'],r['timeTo'])
                    condition_how = str(r['how'])
                    condition_row = '(%s\t%s\t%s\t%s)' % (condition_days, condition_works, condition_time, condition_how)
                    conditions_rows.append(condition_row)
                conditions = '&'.join(x for x in conditions_rows)
                record = [period, workers,range,str(request_row), conditions]
                print "record ", record
                output.writerow(record)

有什么建议吗?

谢谢

【问题讨论】:

  • 所有包含分隔符 \t 的字段都必须被引用!否则在读取时它们将被拆分为多个列。
  • 文件正在被另一个程序读取(自定义读取),所以它不需要适合 excel 或类似的东西
  • 我出来的唯一解决方案是不使用csv writer,而是正常写入文件file.write(period + '\t'+ workers+ '\t'+ range+ '\t'+request_row + '\t'+ conditions+' \r\n')

标签: python csv quotes


【解决方案1】:

看起来您需要为包含空格(在本例中为制表符)的字符串加上引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-24
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2020-04-07
    • 2018-12-16
    • 2017-02-27
    相关资源
    最近更新 更多