python把只有一行的CSV文件变成多行

一个数据量很大的csv文件,但是没有分行,excel打开后只有一行,如何改变格式,使数据按格式对齐

img

img

csv文件在python中打开是这样

img

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7665875
  • 你也可以参考下这篇文章:python存储数据的操作(csv格式文件,Excel表格文件)!!!
  • 除此之外, 这篇博客: python基础练习题中的 题目十五:用程序自动录入数据,甚至连excel都不用打开。在终端运行该程序后,打开excel对应的文件,就会发现数据是按一定的规律录入好的。(CSV格式) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • A君目前在一家资产评估公司实习,他的工作日常就是跑遍市区里的住宅小区,调查小区的地址、建筑年份和每栋楼里每个单元里每一户的朝向和面积。比如一户的资料是:富安花园(小区)3栋 2单元 401户;朝向:南北朝向;面积:90平方。他需要把每一户的信息都记录下来。为了节省时间,通常他们会当场把一栋楼里所有单元的数据画在一张平面图里。等回去之后,再把平面图记录的数据,录入到excel表里。

    举个例子,上面这张平面图表示的是这一栋有4个单元,每个单元有15层楼,其中1,2单元有两户,面积和朝向是140平方,南北朝向。3单元有四户,有2户面积60平方,南北朝向,2户面积80平方,东西朝向;4单元有四户,面积70平方,东西朝向。A君抱怨原本看房已经很累人了,录入更烦。可能你觉得用excel的自动填充功能不是很方便吗,事情远没有这么简单。确实,有一些重复的单元格只要填一次,自动下拉就可以复制粘贴,对于A君(excel菜鸟)来说,每次只要手动输入户室号就可以。(当然掌握一些excel技巧可以节省一些功夫)

    不过,不同单元的户数、朝向和面积不完全是一样的,所以不能以一个单元的数据复制给其他单元,比如说,好不容易输入了1单元的数据,复制给了2单元,但因为3单元有4户,面积和朝向都不一样,所以3单元又得重新处理,户室号、面积、朝向都不一样。

    csv模块:实现用于以 CSV 格式读取和写入表格数据的类。 csv模块的readerwriter对象读取和写入序列。

    程序分析:需要注意的点是户室是变化的,需找出规律,然后按照规律循环,规律:201+1 = 202,202+99=301,再由301+1=302,以此循环

    代码解析:

    import csv
    f = open('s.csv', 'w', encoding='utf-8', newline="")
    csv_writer = csv.writer(f)
    csv_writer.writerow(["小区名称", "地址", "建筑年份", "楼栋", "单元", "户室", "朝向", "面积"])
    a = 201
    for i in range(10):
        for j in range(2):
            list1 = ["晨星花园", "双云路88号", "2010", "1栋", "1单元", a, "南北", 140]
            csv_writer.writerow(list1)
            a = a + 1
        a += 98
    
  • 您还可以看一下 章秀淞老师的python数据分析和可视化课程中的 读取和导出csv文件小节, 巩固相关知识点

import pandas as pd
df = pd.read_csv('test.csv',encoding='utf-8')
data = df.columns.tolist()   #将一行的数据转化为list

# 将list 切片
n = 7  #大列表中几个数据组成一个小列表
result = [  data[i:i + n] for i in range(0, len(data), n) ]
for item in result:
    print(item)

##写入新的文件中
res = pd.DataFrame(result[1:],columns=result[0])
#处理日期有问题的内容
res['gps_time'] = res['gps_time'].map( lambda  x:x.split('.')[0] )
res['create_time'] = res['create_time'].map( lambda  x:x.split('.')[0] )
print(res)

res.to_csv('new.csv',encoding='utf-8',index=False)

img