【发布时间】: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