【问题标题】:Conversion of a CSV file to different form将 CSV 文件转换为不同的格式
【发布时间】:2018-10-11 16:06:21
【问题描述】:

我有一个包含内容的 CSV 文件

01"815732013.0"1brand1"[100 76 64 ... 153 139 94]"

01"815732025.0"1female1"[183 192 201 ... 18 10 0]"

01"815732027.0"1male1"[204 214 221 ... 214 221 255]"

在一列中

我需要这样四列的内容,

col1    col2             col3       col4
01     "815732013.0"    1brand1     "[100  76  64 ... 153 139  94]"
01     "815732025.0"    1female1    "[183 192 201 ...  18  10   0]"
01     "815732027.0"    1male1      "[204 214 221 ... 214 221 255]"

我该如何改变呢? 使用 python/excel/任何其他工具。

【问题讨论】:

  • 您必须提供的不仅仅是一行。目前尚不清楚您是否通过引号来分隔这些字段。或者文本中出现的任何其他内容。

标签: python-3.x csv export-to-csv


【解决方案1】:

如果您不需要在输出文件中包含双引号,那么您应该可以将双引号上的行分开:

import csv
import io


text = '''01"815732013.0"1brand1"[100 76 64 ... 153 139 94]"
01"815732025.0"1female1"[183 192 201 ... 18 10 0]"
01"815732027.0"1male1"[204 214 221 ... 214 221 255]"'''


with io.StringIO(text) as f, open('output.csv', 'w') as of:
    writer = csv.writer(of, delimiter=',', quotechar='"')
    for line in f:
        line = [r for r in line.strip().split('"') if r]
        writer.writerow(line)

这段代码非常简单。您基本上是在双引号上拆分并丢弃空字符串。

如果您希望输出文件包含引号,那么您可能需要使用一些正则表达式来捕获字段:

import csv
import io
import re


text = '''01"815732013.0"1brand1"[100 76 64 ... 153 139 94]"
01"815732025.0"1female1"[183 192 201 ... 18 10 0]"
01"815732027.0"1male1"[204 214 221 ... 214 221 255]"'''


with io.StringIO(text) as f, open('output.csv', 'w') as of:
    pat = re.compile(r'(\d+)(\b".+"\b)(\w+)(\b".+"\b)')
    writer = csv.writer(of, delimiter=',', quotechar='"')
    for line in f:
        line = pat.sub(r'\1;\2;\3;\4', line.strip()).split(';')
        writer.writerow(line)

这与之前的 sn-p 非常相似,唯一的区别是正则表达式。该表达式根据您所需的输出对不同的字段进行分组。这些组用于生成一组行值,这些值传递给writer.writerow 方法以将行写入目标文件。

我希望这证明有用。

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 2020-11-15
    • 2019-07-01
    • 1970-01-01
    • 2015-06-28
    • 2018-08-15
    • 1970-01-01
    • 2018-01-17
    • 2021-01-22
    相关资源
    最近更新 更多