Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python将UTF-8文件分隔成单独的行(逗号分隔)?_Python_Csv_Utf 8 - Fatal编程技术网

如何使用python将UTF-8文件分隔成单独的行(逗号分隔)?

如何使用python将UTF-8文件分隔成单独的行(逗号分隔)?,python,csv,utf-8,Python,Csv,Utf 8,我正在尝试将UTF-16文件转换为UTF-8文件(因为我使用的是python csv模块,它显然不处理UTF-16文件)。然后,我想对这个UTF-8文件进行定界,以便使用一个简单的row.strip()方法将其导入到postgres表中。此python文件如下所示: with codecs.open(sourcefile, 'rU', 'UTF-16') as infile: with open(sourcefile + '.utf8', 'wb') as outfile:

我正在尝试将UTF-16文件转换为UTF-8文件(因为我使用的是python csv模块,它显然不处理UTF-16文件)。然后,我想对这个UTF-8文件进行定界,以便使用一个简单的row.strip()方法将其导入到postgres表中。此python文件如下所示:

with codecs.open(sourcefile, 'rU', 'UTF-16') as infile:
   with open(sourcefile + '.utf8', 'wb') as outfile:
       for line in infile:
           outfile.write(line.encode('utf8'))


with open(sourcefile + '.utf8', 'rb') as f:
    reader = csv.reader(f, delimiter=',')

    for row in reader:
        print row[1]
我无法分隔行,因为行中似乎只有一个索引,而打印行[1]会给我一个索引范围-如何拆分此文件

Excel行:

15,"1/2 TYPE A","98","MCDS, TX","XA","852","TX","955","148","HAPPY, TX",,"$0.00","0","0.00","$1,504","179","0.00%","100.00%","0"
32,"1/2 TYPE B","98","MCDS, MI","XA","252","MI","72","925","HAPPY, MI",,"$0.00","0","0.00","$2,504","225","0.00%","100.00%","0"
我很抱歉没有很好的描述。基本上,输入文件是UTF-16文件。我曾经用excel打开文件,用分隔符“,”将一列分隔成多列,并将其另存为csv文件。然后,我通过一个python脚本运行这个被操纵的csv文件,该脚本能够读取csv文件,剥离行,并将数据导入postgres数据库

python脚本的原始导入部分(当我用分隔符“,”分隔时)如下所示(简化版本):

但是,我现在希望能够使用python脚本简单地运行UTF-16文件,将数据导入postgres,这样就不必在excel中打开该文件。我希望通过将文件转换为UTF-8文件,然后以某种方式剥离每一行并将其导入我的数据库来实现这一点


我已经能够成功地将文件转换为UTF-8,但是现在我遇到了一个问题,UTF-8文件实际上是一堆被视为“一列”的行。我该如何剥离每一行?我无法执行简单的行[0].strip(),因为文件中有一些逗号属于描述。

不创建中间文件,只需使用描述的转换(搜索
unicode\u csv\u reader
)。为方便起见,我已将生成器转换为生成器表达式:

import codecs
import csv

sourcefile = 'csv16.csv'
with codecs.open(sourcefile, 'rU', 'UTF-16') as infile:
    reader = csv.reader((line.encode('utf-8')
                         for line in infile),
                        delimiter=',')
    for row in ([item.decode('utf-8')
                 for item in row]
                for row in reader):
        print u'/'.join(row)
我已针对以下文件测试了上述代码,该文件保存为Big-endian UTF-16:

1,2,3,4
5,6,7,8
"98°","①", "®©§™"
输出:

1/2/3/4
5/6/7/8
98°/①/ "®©§™"

我不确定我是否理解这个问题,但是……如果您看到文档顶部的注释,其中告诉您2.x
csv
不支持Unicode,您是否没有看到下面的链接,该链接显示了如何使用简单的包装器处理Unicode csv文件?如果手动检查
.utf8
版本,您会看到什么?另外,您能否澄清所需的输出以及您看到的内容?更好的是,您能否上传一个示例UTF16文件,我们可以对其进行测试?当我准确地获取这两行内容,将其保存到UTF-16文本文件中,并按照此处发布的方式运行代码时,我会得到两个19列的行,因此,您的代码将打印出
1/2类型A
,然后打印出
1/2类型B
。所以,很明显,这不是你的意见。您需要解决的问题是,您的输入看起来与您认为的不一样,并且在没有看到您的实际输入的情况下,没有人能够帮助您解决这个问题。@abarnert:这条注释是否自相矛盾,因为它继续说:“因此,所有输入都应该是UTF-8或可打印的ASCII以确保安全”
1/2/3/4
5/6/7/8
98°/①/ "®©§™"