gpt4 book ai didi

python - 使用 Python 将 csv 转换为固定宽度文件

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:56 24 4
gpt4 key购买 nike

如何将 CSV 转换为固定宽度的文件格式。

import csv
with open('C:\\Users\\thara.savio\\Downloads\\Sacramentorealestatetransactions.csv', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
for row in spamreader:
print(' '.join(row))

它转换为以制表符为分隔符的非固定宽度格式的文本文件。

下面是我得到的结果。

3526 HIGH ST     SACRAMENTO     95838     CA     2     1     836     Residential     Wed May 21 00:00:00 EDT 2008     59222     38.631913     -121.434879
51 OMAHA CT SACRAMENTO 95823 CA 3 1 1167 Residential Wed May 21 00:00:00 EDT 2008 68212 38.478902 -121.431028
2796 BRANCH ST SACRAMENTO 95815 CA 2 1 796 Residential Wed May 21 00:00:00 EDT 2008 68880 38.618305 -121.443839
2805 JANETTE WAY SACRAMENTO 95815 CA 2 1 852 Residential Wed May 21 00:00:00 EDT 2008 69307 38.616835 -121.439146
6001 MCMAHON DR SACRAMENTO 95824 CA 2 1 797 Residential Wed May 21 00:00:00 EDT 2008 81900 38.51947 -121.435768
5828 PEPPERMILL CT SACRAMENTO 95841 CA 3 1 1122

最佳答案

您可以预处理数据以获得每列的最大宽度并使用 string format mini language 写入文件:

data = """3526 HIGH ST, SACRAMENTO, 95838, CA, 2, 1, 836, Residential, Wed May 21 00:00:00 EDT 2008, 59222, 38.631913, -121.434879
51 OMAHA CT, SACRAMENTO, 95823, CA, 3, 1, 1167, Residential, Wed May 21 00:00:00 EDT 2008, 68212, 38.478902, -121.431028
2796 BRANCH ST, SACRAMENTO, 95815, CA, 2, 1, 796, Residential, Wed May 21 00:00:00 EDT 2008, 68880, 38.618305, -121.443839
2805 JANETTE WAY, SACRAMENTO, 95815, CA, 2, 1, 852, Residential, Wed May 21 00:00:00 EDT 2008, 69307, 38.616835, -121.439146
6001 MCMAHON DR, SACRAMENTO, 95824, CA, 2, 1, 797, Residential, Wed May 21 00:00:00 EDT 2008, 81900, 38.51947, -121.435768"""

# max-width per column, column == key, width == value
w = {}
lines = data.splitlines()
for line in lines:
for col_nr, col in enumerate(line.strip().split(",")):
w[col_nr] = max( w.get(col_nr,0), len(col))

# w == {0: 16, 1: 11, 2: 6, 3: 3, 4: 2, 5: 2,
# 6: 5, 7: 12, 8: 29, 9: 6, 10: 10, 11: 12}

# write file
with open("file.txt","w") as f:
for line in lines:
for col_nr, col in enumerate(line.strip().split(",")):
# the :<{w[col_nr]+5}} - part is left-adjusting to certain width
f.write(f"{col:<{w[col_nr]+5}}") # 5 additional spaces
f.write("\n")

with open("file.txt","r") as f:
print(f.read())

输出:

3526 HIGH ST          SACRAMENTO      95838      CA      2      1      836       Residential      Wed May 21 00:00:00 EDT 2008      59222      38.631913      -121.434879     
51 OMAHA CT SACRAMENTO 95823 CA 3 1 1167 Residential Wed May 21 00:00:00 EDT 2008 68212 38.478902 -121.431028
2796 BRANCH ST SACRAMENTO 95815 CA 2 1 796 Residential Wed May 21 00:00:00 EDT 2008 68880 38.618305 -121.443839
2805 JANETTE WAY SACRAMENTO 95815 CA 2 1 852 Residential Wed May 21 00:00:00 EDT 2008 69307 38.616835 -121.439146
6001 MCMAHON DR SACRAMENTO 95824 CA 2 1 797 Residential Wed May 21 00:00:00 EDT 2008 81900 38.51947 -121.435768

关于python - 使用 Python 将 csv 转换为固定宽度文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53014453/

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