【问题标题】:How to convert a text file seperated by a new line to a csv file using python如何使用python将由新行分隔的文本文件转换为csv文件
【发布时间】:2017-03-28 10:06:07
【问题描述】:

如何将由新行分隔的文本文件转换为 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()

我的问题是它为每个字符添加一个逗号

【问题讨论】:

  • 这是怎么回事?
  • @TigerhawkT3 "/_37040/" 变成 "/,_,3,7,0,4,0" 这就是它的问题所在。我想要 1 列多行。
  • 如果您只想要一列,那么您的输入文件已经是单列 CSV 文件...

标签: python csv text


【解决方案1】:

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])

【讨论】:

    【解决方案2】:

    错误的输出来自您对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 ...:)
      • 计算线应该变成什么
      • 将其写入输出文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 2019-05-31
      • 2023-03-15
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多