如何使用python将由新行分隔的文本文件转换为csv文件

时间:2017-03-28 10:06:07

标签: python csv text

如何将由新行分隔的文本文件转换为csv文件。

文本文件示例

/themes/modern/user_style.php?user_colors[bg_color]="</style><script></script>
?<meta http-equiv=set-cookie content="testpokn=7494">
/_37040/
/clr_cream/
reg_req/
trackir3pro-1/
selector_10274/
javascript/orders.html
perlutil/
/carte_ameriques2/
/javascript/count.conf
/glow_chairs/

我想将此AS转换为csv文件。 1列,多行。文本文件的每一行都应该是csv文件中的一行。

的Python

def loadFile(name):

    directory = os.getcwd()
    filepath = directory + "/" + name
    data = open(filepath,'r').readlines()

    result = []
    for d in data:
        d = str(urllib.parse.unquote(d))
        result.append(d)
    return result



def main():

    data = loadFile('code.txt')

    with open('new.csv', 'w', newline='') as fp:
        a = csv.writer(fp,)
        a.writerows(data)

main()

我的问题是,对于每个字符,它都会添加一个逗号

2 个答案:

答案 0 :(得分:0)

writerows应使用列表或元组列表,例如[('bla', ), ('bla', )]

def main():
    data = loadFile('code.txt')

    with open('new.csv', 'w', newline='') as fp:
        a = csv.writer(fp,)
        a.writerows([(r, ) for r in data])

答案 1 :(得分:0)

错误的输出来自您writerows的使用。它应该接收迭代(列)的可迭代(行)。当你给它一个字符串列表时,它将每个字符串作为可迭代的字符,因此输出。

一个简单的解决方法是loadFile返回一个1元组的字符串列表:

def loadFile(name):

    directory = os.getcwd()
    filepath = directory + "/" + name
    data = open(filepath,'r').readlines()

    result = []
    for d in data:
        d = str(urllib.parse.unquote(d))
        result.append((d,))   # result now contains 1-tuple of strings
    return result

但无论如何,当你单独处理每一行时,如果对这个通用程序结构有更多的内存友好性:

  • 打开输入文件并输出csv(with open(...) as ...
  • 按行(for line in ...:)循环输入文件
    • 计算该行应该成为什么
    • 将其写入输出文件