将文件输出到CSV

2024-09-27 21:27:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试解析json文件中的数据,并根据该输出创建csv文件。我已经编写了python脚本来根据需要创建输出。我需要在时间和日期排序下面的csv文件

电流输出

current output

我的代码:

## Shift Start | End time. | Primary | Secondary
def write_CSV () :
    # field names
    fields = ['ShiftStart', 'EndTime', 'Primary', 'Secondary']
    # name of csv file
    filename = "CallingLog.csv"

    # writing to csv file
    with open(filename, 'w') as csvfile:
        # creating a csv dict writer object
        writer = csv.DictWriter(csvfile, delimiter=',', lineterminator='\n', fieldnames = fields)
        # writing headers (field names)
        writer.writeheader()
        # writing data rows
        writer.writerows(totalData)

我希望我的csv文件与日期和时间排序如下。至少日期可以

ShiftStart                           
2020-11-30T17:00:00-08:00       
2020-12-01T01:00:00-08:00       
2020-12-02T05:00:00-08:00       
2020-12-03T05:00:00-08:00       
2020-12-04T09:00:00-08:00       
2020-12-05T13:00:00-08:00       
2020-12-06T13:00:00-08:00       
2020-12-07T09:00:00-08:00       
2020-12-08T17:00:00-08:00       
2020-12-09T09:00:00-08:00       
2020-12-10T09:00:00-08:00       
2020-12-11T17:00:00-08:00

Tags: 文件csvcsvfilefieldfieldsnames排序时间
2条回答

您可以根据您的数据调整此示例(我没有掌握-:)

from csv import DictReader, DictWriter
from sys import stdout

# simple, self-contained data
data = '''\
a,b,c
3,2,1
2,2,3
1,3,2
'''.splitlines()

# read the data
dr = DictReader(data)
rows = [row for row in dr]

# print the data

print('# unsorted')
dw = DictWriter(stdout, dr.fieldnames)
dw.writeheader()
dw.writerows(rows)

print('# sorted')
dw = DictWriter(stdout, dr.fieldnames)
dw.writeheader()
dw.writerows(sorted(rows, key=lambda d:d['a']))
# unsorted
a,b,c
3,2,1
2,2,3
1,3,2
# sorted
a,b,c
1,3,2
2,2,3
3,2,1

In [40]: 

使用DictReader读取数据时,列表rows的每个元素都是一个字典,键入CSV数据文件第一行的字段名

如果要根据与键对应的值对列表进行排序,则必须为sorted提供一个key参数,该参数是一个返回要排序的值的函数

调用此函数时,需要对整个元素进行排序,在您的例子中是一个字典,我们希望对CSV的第一个字段进行排序,该字段由'a'索引,因此我们的函数使用lambda syntx在函数调用中内联定义,只是lambda d: d['a']返回我们要排序的值

注意,本例中的排序是按字母顺序排序的,因为我处理的是单个数字,一般来说,您可能需要将值(默认为字符串)转换为在上下文中有意义的其他值,例如lambda d: int(d['a'])

YourDataframe.sort_values(['Col1','Col2']).to_csv('Path')

试试这个,这不仅排序和复制到csv,而且还保留原始数据帧,无需在程序中排序,以便在需要时进行进一步操作

相关问题 更多 >

    热门问题