gpt4 book ai didi

python - 读取文本文件、操作字符串并以特定格式导出 csv

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:28 25 4
gpt4 key购买 nike

我正在尝试读取一个具有一些时髦格式的文本文件并操作一些字符串并导出 csv 文件。导入文本是多边形和坐标的列表,导出是具有与其关联的唯一 ID 的坐标列表。我一直致力于使代码能够灵活地适应各种长度的多边形和各种数量的多边形。列表示例:

['poly', '1', '317806.6570985045', '4312355.239299678', '317808.2079078924', '4312354.675368992', '317806.1871562657', '4312348.754096784', '317804.4953642061', '4312349.365021695', 'poly', '2', '317811.4975035638', '4312361.724502574', '317810.651607534', '4312362.006467917', '317809.3357692654', '4312358.199935783', '317810.3226479669', '4312357.917970439']

输出 csv 示例:

poly1A, 317806.6570985045, 4312355.239299678
poly1B, 317808.2079078924, 4312354.675368992
poly1C, 317806.1871562657, 4312348.754096784
poly2A, 317811.4975035638, 4312361.724502574

到目前为止,我已经清理了输入的 .txt 并获得了相关信息的列表。我循环遍历列表并计算“poly”出现的次数,以了解将有多少个多边形。我陷入了如何循环遍历列表并计算多边形之间的坐标集数量的问题,以了解在哪里将它们从列表中剪切到新列表中,同时保持不同大小多边形的灵 active 。到目前为止我的代码:

with open("Polys.txt", "r") as in_file, open("csvout.csv", 'w') as out_file:
lines_list = in_file.readlines()
del lines_list[0:5]
#print(lines_list[])
poly_list = []
for i in range(len(lines_list)):
poly_list.append(lines_list[i].strip('\n'))
poly_list_strip = []
for i in range(len(poly_list)):
poly_list_strip.append(poly_list[i].strip())
poly_list_untab =[]
for i in range(len(poly_list_strip)):
poly_list_untab.append(poly_list_strip[i].split())
#print(poly_list_untab)
flat_poly_list = [val for sublist in poly_list_untab for val in sublist]
poly_index = [i for i, x in enumerate(flat_poly_list) if x == 'poly']
poly_comb = flat_poly_list[]

最佳答案

如果我正确理解所需的输出,您可以使用以下方法。 list_to_csv(l, n) 被调用,l 指的是问题中的字符串列表,n 指的是多边形的长度。如果您想在同一列表中考虑不同大小的多边形,那么您需要某种方法来识别它。

import string
import csv

chars = string.ascii_uppercase

def isplit(iterable,splitters):
"""https://stackoverflow.com/a/4322780/12366110"""
return [list(g) for k,g in itertools.groupby(iterable,lambda x:x in splitters) if not k]

def chunks(lst, n):
"""https://stackoverflow.com/a/312464/12366110"""
for i in range(0, len(lst), n):
yield lst[i:i + n]

def list_to_csv(l, n):
split = [(f"poly{x[0]}{chars[i]}", *chunk) for x in isplit(l, 'poly') for i, chunk in enumerate(chunks(x[1:], n))]
with open('csvout.csv','w',newline='') as f:
csv_out=csv.writer(f)
csv_out.writerow(['name', *[f"coord{x}" for x in range(n)]])
for row in split:
csv_out.writerow(row)

用法:

>>> l = ['poly', '1', '317806.6570985045', '4312355.239299678', '317808.2079078924', '4312354.675368992', '317806.1871562657', '4312348.754096784', '317804.4953642061', '4312349.365021695', 'poly', '2', '317811.4975035638', '4312361.724502574', '317810.651607534', '4312362.006467917', '317809.3357692654', '4312358.199935783', '317810.3226479669', '4312357.917970439']
>>> list_to_csv(l, 2)

输出:

name,coord0,coord1
poly1A,317806.6570985045,4312355.239299678
poly1B,317808.2079078924,4312354.675368992
poly1C,317806.1871562657,4312348.754096784
poly1D,317804.4953642061,4312349.365021695
poly2A,317811.4975035638,4312361.724502574
poly2B,317810.651607534,4312362.006467917
poly2C,317809.3357692654,4312358.199935783
poly2D,317810.3226479669,4312357.917970439

关于python - 读取文本文件、操作字符串并以特定格式导出 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59990081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com