python - 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 的一些格式问题吗?
解决方案
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)
推荐阅读
- spring-boot - 将 Spring JPA 实现到 COSMOS DB 的 Spring Boot 应用程序
- regex - 如何过滤 Powershell 以将目录名称与 AD SamAccountName 进行比较并忽略 .Vx 模式?
- android - 对 Kotlin 协程感到困惑
- xamarin - CollectionView 在 Xamarin Forms 中导致呈现异常
- java - 使用 StringBuilder/StringWriter/String.format() 附加大字符串时出现 Java OutofMemoryException
- ffmpeg - ffmpeg 添加字幕工作正常,但不能在 chrom 浏览器中
- qt - 无法在 Qt 中使用 QDir 创建文件夹
- react-native - 无法在 React Native 中构建 APK?
- python - 每年插入五年数据
- c - 如何在 Linux/C 中编写程序以使用键盘模拟单八度钢琴