【问题标题】:How to ignore commas within cells when reading data from a CSV - Python从 CSV 读取数据时如何忽略单元格中的逗号 - Python
【发布时间】:2018-03-29 09:34:03
【问题描述】:

我正在尝试从 CSV 文件中读取数据并将其加载到 DynamoDB 表中。问题是描述是用句子写的并且有逗号。如何读取带有逗号分隔符的列,但忽略单元格中的逗号?

目前,我正在使用此代码读取 CSV 文件并写入数据库:

def import_csv_to_dynamodb(table_name, csv_file_name, col_names, column_types):
'''
Import a CSV file to a DynamoDB table
'''
dynamodb_conn = boto.connect_dynamodb(aws_access_key_id=MY_ACCESS_KEY_ID,
                                      aws_secret_access_key=MY_SECRET_ACCESS_KEY)
dynamodb_table = dynamodb_conn.get_table(table_name)
BATCH_COUNT = 2  # 25 is the maximum batch size for Amazon DynamoDB

items = []

count = 0
csv_file = open(csv_file_name, 'r', encoding="utf-8-sig")
for cur_line in csv_file:
    count += 1
    cur_line = cur_line.strip().split(',')

    row = {}
    for col_number, col_name in enumerate(col_names):
        row[col_name] = column_types[col_number](cur_line[col_number])

    item = dynamodb_table.new_item(
        attrs=row
    )
    items.append(item)

    if count % BATCH_COUNT == 0:
        print
        'batch write start ... ',
        do_batch_write(items, table_name, dynamodb_table, dynamodb_conn)
        items = []
        print
        'batch done! (row number: ' + str(count) + ')'

# flush remaining items, if any
if len(items) > 0:
    do_batch_write(items, table_name, dynamodb_table, dynamodb_conn)

csv_file.close()

【问题讨论】:

  • 一般如果单元格中有逗号。 csv 中的整个数据都在引号内。这就是你区分的方式,然后你可以使用这里提到的 python 内置 csv 库 - stackoverflow.com/questions/8311900/…
  • 有许多不同的 CSV 准标准方言以不同的方式处理这个问题。如果您想从头开始构建它,您需要了解如何创建 CSV 并阅读文档,或者自己对规则进行逆向工程。但是如果你使用 stdlib csv 模块,它已经知道最流行的方言,这让事情变得容易多了。
  • 无论如何。如果您确实想计算方言并自己解析,则需要提供minimal reproducible example——包括足够的样本输入来计算方言。但实际上,切换到 csv 模块并关闭此问题几乎肯定会更好。

标签: python amazon-web-services csv amazon-dynamodb boto


【解决方案1】:

Python 内置的csv 库非常好。文档真的不需要额外的解释:

https://docs.python.org/3/library/csv.html

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 2018-02-15
    • 2021-01-03
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多