python - 在 Python 中将超过 65535 行写入 csv 文件?
问题描述
我在 Python 脚本中有以下逻辑:
def importAndAnalyze(rowLimit = 3):
layerProperties = iface.addVectorLayer("Downloads/parcels-shp/parcels.shp", "Parcels", "ogr")
if not layerProperties:
print("layerProperties failed to load!")
layerEntrances = iface.addVectorLayer("Downloads/Metro_Stations-shp/Metro_Stations.shp", "Metro_Stations", "ogr")
if not layerEntrances:
print("layerEntrances failed to load!")
features = layerProperties.getFeatures()
counter = 0
featuresSelected = []
Path('Desktop/output.csv').touch()
with open('Desktop/output.csv', 'w') as csvfile:
csvWriter = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
csvWriter.writerow(['Tooltip', 'Lat','Lon', 'Distance'])
for feature in features:
if counter < rowLimit:
csvWriter.writerow([feature['TOOLTIP'], feature.geometry().centroid().asPoint().y(),feature.geometry().centroid().asPoint().x(), Ranker.calculateDistance(feature, layerEntrances)])
if counter % 100 == 0:
csvfile.flush()
else:
break
counter += 1
Ranker.importAndAnalyze(1000000)
当我向它提供 800,000 行信息时,将 rowLimit 变量设置为 100 万行,它当前正好将 65,535 行保存到 output.csv 文件中,然后停止保存新行,即使脚本继续运行数小时也是如此。
如何让我的脚本保存其他 734,465 行?
===
rowLimit
编辑:关于我的变量是否实际设置为一百万的评论/答案中有很多正确的猜测。所以我添加了更多代码来显示它是如何运行的上下文。
解决方案
csv
模块本身没有施加这样的约束。您的代码在到达变量rowLimit
(未在您的问题中定义)时停止写入,因此显而易见且微不足道的解决方案是将其取出。
这是一个重构的尝试,它还重命名变量以遵守 Python 约定。
with open('Desktop/output.csv', 'w') as csvfile:
csv_writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
csv_writer.writerow(['Tooltip', 'Lat','Lon', 'Distance'])
for counter, feature in enumerate(features):
# if counter == row_limit:
# raise StopIteration('row_limit reached')
csv_writer.writerow([feature['TOOLTIP'], feature.geometry().centroid().asPoint().y(),feature.geometry().centroid().asPoint().x(), Ranker.calculateDistance(feature, layerEntrances)])
if counter % 100 == 0:
csvfile.flush()
当然,您可能使用程序读取无法处理任意大文件的生成的 CSV 文件;至少 Excel 似乎对大于 65,535 行的工作表有问题(但朋友不要让朋友使用 Excel)。
推荐阅读
- jquery - Changing the value of a radio button to be checked based upon a variable using jquery
- c# - 如何使用kinect计算腿的速度
- django - 媒体文件夹图像未显示在模板页面中
- flutter - 如何在 Flutter App 中拥有大量移动的 Widget
- exception - 在不更改任何代码的情况下导致异常
- assembly - MIPS:加载字节指令
- jenkins - 如果不在 Jenkinsfile 中运行,则无法定期禁用
- sql - 从生产数据库连接 localdb
- velo - Wix 100% 高度和宽度(全屏)iframe
- python - 根据组出现的次数创建组列