首页 > 解决方案 > 将 csv 列中的占位符字符替换为输出文件中的换行符(使用 python)

问题描述

我必须将包含在 csv 文件列中的代码写入新文件(从每一行)。当然,代码实际上应该包含换行符,所以我插入了一个占位符(@),我想在输出新文件时将其转换为换行符。我试图在代码中的不同位置进行替换,但没有任何效果。我什至没有用 \r\n 字符串替换 @ 。在我的上一个版本(如下)中,python 只是愉快地继续输出@:

import csv
import codecs


tablelist=('gz_categoria', 'gz_cabildo')
counter=0
for item in tablelist:
    with open('C:/Hgis/'+"%s" % (item)+'.csv', 'r') as csvFile:
        reader = csv.reader(csvFile)
        for row in reader:
            row[1].replace('\r\n', '\\r\n')
            row[1].replace('@', '\\r\n')
            newpage = codecs.open ('C:/Hgis/db/'+"%s" % (item)+''+str(counter)+'.txt',encoding='utf-8', mode='w+')
            newpage.write(row[1].decode('UTF-8'))
            counter = counter+1
            newpage.close()

以下是 csv 的前两行:

1,---- 数据输入类别 ----@ID: 1000135categoria: Ciudad@subcategoria: Ciudad@es parte de: @Desde: 1539@Hasta: 9999@Desde_fuzzy: exact@Hasta_fuzzy: end@----,1000135 ,Patzcuaro,1539,exact,9999,end,Ciudad,Ciudad,gerhardNE,None,No,-2

2,---- 数据输入类别----@ID: 1000136categoria: Pueblo@subcategoria: Pueblo de indios@es parte de: @Desde: 1111@Hasta: 9999@Desde_fuzzy: start@Hasta_fuzzy: end@---- ,1000136,Puruandiro,1111,start,9999,end,Pueblo,Pueblo de indios,tanck,None,No,0

文件 1 中的所需输出:

---- 数据输入类别 ----

编号:1000135

分类: 城

子类别: 城市

es parte de:

德斯德:1539

哈斯塔:9999

Desde_fuzzy:精确

Hasta_fuzzy:结束


标签: python

解决方案


事实上,正如@snakecharmerb 评论的那样,错误是没有为结果分配变量:

以下代码产生所需的结果:

tablelist=('gz_categoria', 'gz_cabildo')
counter=0
for item in tablelist:
    with open('C:/Hgis/'+"%s" % (item)+'.csv', 'r') as csvFile:
        reader = csv.reader(csvFile)
        for row in reader:
            row[1].replace('@', '\r\n')
            newpage = codecs.open ('C:/Hgis/db/'+"%s" % (item)+''+str(counter)+'.txt',encoding='utf-8', mode='w+')
            newpage.write(row[1].decode('UTF-8'))
            counter = counter+1
            newpage.close()

推荐阅读