Using python csv writer without quotations

前端 未结 4 922
猫巷女王i
猫巷女王i 2020-12-31 11:47

I\'m trying to write a list of strings like below to a file separated by the given delimiter.

res = [u\'123\', u\'hello world\']

When I try

相关标签:
4条回答
  • 2020-12-31 12:22

    Quoting behavior is controlled by the various quoting arguments provided to the writer (or set on the Dialect object if you prefer to do things that way). The default setting is QUOTE_MINIMAL, which will not produce the behavior you're describing unless a value contains your delimiter character, quote character, or line terminator character. Doublecheck your test data - [u'123', u'hello'] won't produce what you describe, but [u'123', u' hello'] would.

    You can specify QUOTE_NONE if you're sure that's the behavior you want, in which case it'll either try to escape instances of your delimiter character if you set an escape character, or raise an exception if you don't.

    0 讨论(0)
  • 2020-12-31 12:33

    Do you need the csv lib? Just join the strings...

    >>> res = [u'123', u'hello'] 
    >>> print res
    [u'123', u'hello']
    >>> print " ".join(res)
    123 hello
    
    0 讨论(0)
  • 2020-12-31 12:46

    You can set the csv.writer to quote nothing with quoting=csv.QUOTE_NONE for example:

    import csv
    with open('eggs.csv', 'wb') as csvfile:
        spamwriter = csv.writer(csvfile, delimiter=' ',
                                escapechar=' ', quoting=csv.QUOTE_NONE)
        spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
        spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
    

    Produces:

    Spam Spam Spam Spam Spam Baked  Beans
    Spam Lovely  Spam Wonderful  Spam
    

    If you do QUOTING_NONE you also need and escape character.

    0 讨论(0)
  • 2020-12-31 12:46

    What worked for me was using a regular writer, not the csv.writer, and simply use your delimiter in between columns ('\t' in my case):

    with open(target_path, 'w', encoding='utf-8') as fd:
         # some code iterating over a pandas daftaframe called mydf     
         # create a string out of column 0, '\t' (tab delimiter) and column 1:
         output = mydf.loc[i][0] + '\t' + mydf.loc[i][1] +'\n'
         # write that output string (line) to the file in every iteration
         fd.write(output)
    

    It might not be the "correct" way but it definitely kept the original lines in my project, which included many strings and quotations.

    0 讨论(0)
提交回复
热议问题