首页 > 解决方案 > CSV - 使用自定义 python 脚本读取问题

问题描述

我正在编写一个自定义脚本,其首要任务是将 csv 的数据提取到 python 字典中。但是变量有一些奇怪的行为:当执行下面的脚本时,而不是后续输入,我得到“压缩文本(77 行)”作为输出。如果我检查它,我会看到一个白色的空白屏幕,所以似乎什么都没有。完全不明白发生了什么。。

我的脚本:

import os
import io

separator = ";"

source_data_folder = os.path.realpath( __file__ ).replace( "extraction.py", "source_data" )

for source_file in os.listdir( source_data_folder ):

    iterated_source_file = io.open( source_data_folder + "/" + source_file, encoding='windows-1252' )

    source_data = {}

    source_data_key_indexes = {}

    line_counter = 0

    for iterated_line in iterated_source_file:

        iterated_lines_data = iterated_line.split( "" + separator + "" )

        column_counter = 0

        if line_counter == 0:

            for iterated_lines_field in iterated_lines_data:

                source_data[iterated_lines_field] = []

                source_data_key_indexes[column_counter] = iterated_lines_field

                column_counter += 1

        else:

            for iterated_lines_field in iterated_lines_data:
                source_data[source_data_key_indexes[column_counter]].append( iterated_lines_field )

                column_counter += 1

        line_counter += 1

    iterated_source_file.close()

    for column_index in source_data_key_indexes:
        input( "Shall the column '" + source_data_key_indexes[column_index] + '"be exported? (y/n)" )

当我把这部分:

for column_index in source_data_key_indexes:
        input( "Shall the column '" + source_data_key_indexes[column_index] + '"be exported? (y/n)" )

在最初的 for 循环之外,没有任何缩进,但是它可以工作;但我需要在第一个 for 循环中调用它。我可以通过回调来解决这个问题,但为什么会发生这种情况?

我正在使用 Python v. 3.7.3 并通过 Python Shell v. 3.7.3 执行脚本。

示例 CSV 文件的内容,位于 source_data 文件夹中,该文件夹与“extraction.py”文件位于同一位置,包含上面的代码:

first;second;third;fourth
this;is;the;1st
this;is;the;2nd

此 CSV - 文件是通过在新的 Microsoft Office Excel 数据表中创建相应的表格获得的,具有相应的三行 + 四列,然后通过“另存为...”将文件保存为 utf-8 csv 文件并选择 utf -8 csv 文件类型。

注意:我注意到当我添加该行时

print( iterated_line )

在我的代码行下方line_counter == 0:,有趣的是,我再次获得了“压缩文本(77 行)”,然后是第一行的可见内容作为一个简单的字符串。这仅适用于表格标题行(仅第一行);对于其他仅输出行内容。有趣的是,我以上述方式创建的任何 csv 文件都会发生这种情况;无论行数、列数或它们的内容。那么这实际上是 Python + Ms Excel 的一些格式问题吗?

标签: pythonpython-3.xfor-loop

解决方案


import os
import csv

source_data_folder = os.path.realpath( __file__ ).replace("extraction.py", "source_data")

for filename in os.listdir(source_data_folder):
    with open(filename, encoding='windows-1252') as fp:
        reader = csv.DictReader(fp, delimiter=';')
        table = list(reader)
        # Convert list of dicts to dict of lists
        table = {key: [item[key] for item in table] for key in table[0]}
        print(table)

推荐阅读