我是Python的新手,并希望阅读下面列出的内容的CSV文件:

DN, whenCreated, name, pwdLastSet, location

"CN=Jackson2,OU=Domain Controllers,DC=one,DC=onecity,DC=net",20100623145323.0Z,Jackson8,1.30745E+17,Japan,

"CN=Jackson4,OU=Prod,OU=Windows 2014 Servers,OU=STE,DC=one,DC=onecity,DC=net",20041208192730.0Z,Jackson7,1.30735E+17,Aussie,

该CSV文件的长度为数千行,我想将所有字段输出到新的CSV文件中,然后将whenCreated和pwdLastSet字段更改为易于阅读的格式。任何意见,将不胜感激。请注意,在此示例中,有5列包含3行,第一行是列标题。

因此,请放心,因为这是我编写的第一个python脚本。但是,任何建议,评论和最佳实践都将不胜感激。

import csv

import sys

import time

from datetime import datetime

def adTimestampToUnix(ad):

#Convert an 18-digit Windows NT timestamp to a UNIX timestamp

return int(((ad / 10000000) - 11644473600))

import datetime

file = open("source.csv", 'rt')

fileWrite = open("target.csv", 'w', newline='')

try:

csvFile = csv.reader(file)

csvWrite = csv.writer(fileWrite, dialect='excel')

for row in csvFile:

csvWrite.writerow(row)

for row in csvFile:

whenCreated = row[1]

year = whenCreated[:4]

month = whenCreated[4:6]

day = whenCreated[6:8]

hour = whenCreated[8:10]

minute = whenCreated[10:12]

seconds = whenCreated[12:14]

whenCreated =(month+"/"+day+"/"+year+" "+hour+":"+minute+":"+seconds)

pwdLastSet = int(row[3])

pwdLastSet = adTimestampToUnix(pwdLastSet)

if pwdLastSet < 1:

pwdLastSet = ""

else:

pwdLastSet = datetime.datetime.utcfromtimestamp(pwdLastSet).strftime('%Y-%m-%d %H:%M:%S')

row = (row[0],whenCreated,row[2],pwdLastSet,row[4])

csvWrite.writerow(row)

finally:

file.close()

解决方案

如您对问题的第一条评论所述,csv模块将负责CSV文件的基本读写。使用第一个示例

import csv

with open('some.csv', newline='') as f:

reader = csv.reader(f)

for row in reader:

print(row)

与您的CSV文件一起显示,acsv.reader会将文件中的每一行都转换为字符串列表

['DN',' whenCreated',' name',' pwdLastSet',' location']

['"CN=Jackson2,OU=Domain Controllers,DC=one,DC=onecity,DC=net"','20100623145323.0Z','Jackson8','1.30745E+17','Japan','']

同样,acsv.writer将获取值列表并将其写入输出文件中的一行。

简单。

因此,您的问题中真正有趣的部分是:

I)修复第一行(列标题)

请注意,第一个列表中的大多数列名称都有一个前导空格。我们希望摆脱这些问题,因为它们可能会带来问题。如果您使用其他语言,则可能会考虑使用循环,例如

for i in range(len(row)):

row[i] = row[i].strip()

但是,在Python中,首选形式是使用“列表理解”,

row = [x.strip() for x in row]

II)whenCreated进入“人类可读格式”。

确实已经是,但是一些破折号和冒号会将其转换为ISO 8601日期格式,因此让我们使用.format像这样的字符串对象的方法

x = row[1]

row[1] = '{}-{}-{}T{}:{}:{}'.format(x[:4],x[4:6],x[6:8],x[8:10],x[10:12],x[12:])

row[1]从...转换

20100623145323.0Z

...对此:

2010-06-23T14:53:23.0Z

III)pwdLastSet进入“人类可读格式”。

我从您更新的问题中看到,这些数字是18位Active Directory时间戳(以科学计数法表示),因此您可以使用datetime我们将其转换为绝对正确

from datetime import datetime

row[3] = datetime.utcfromtimestamp(float(row[3])/10000000-11644473600).isoformat() + 'Z'

将row[3]从此转换...

1.30745E+17

...对此:

2015-04-26T05:33:20Z

python csv文件数据根据逗号分隔_Python 3读取以逗号分隔的CSV文件操作变量并写到CSV...相关推荐

  1. python统计excel数据总行数_Python怎么读取Excel的行数和列数?

    在把数据写入Excel的过程中遇到了问题,写入的数据是for循环进去的,所以是分多次写入(每次for循环写入一次,一次有几十条数据). 但是在第二次for循环写数据时,就会覆盖掉第一次写的数据,就是后 ...

  2. python处理完数据导入数据库_python操作数据库之批量导入

    python操作数据库之批量导入 Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的 ...

  3. python做大数据的框架_Python+大数据计算平台,PyODPS架构手把手教你搭建

    原文链接:http://click.aliyun.com/m/13965/ 在2016年10月的云栖社区在线培训上,来自阿里云大数据事业部的秦续业分享了<双剑合壁--Python和大数据计算平台 ...

  4. python excel处理数据的优点_python处理excel的优势是什么

    我们经常在工作中需要处理大量的数据,所以Excel工作中是一个不可或缺的工具.然而,最近很多人都开始使用Python来处理数据,那么为什么你开始使用Python吗?Python协助处理excel的优势 ...

  5. 读取ANSYS结果文件中的数据C语言,Ansys后处理读取非默认的结果文件数据 | 坐倚北风...

    在进行后处理时,Ansys默认读取当前目录下的默认求解结果文件.Ansys的求解结果文件有以下几种: (1).RST – 结构分析或耦合场分析结果: (2).RTH – 热分析和扩散分析结果: (3) ...

  6. java内存中读文件_关于内存管理:读取Java中的大文件

    我需要一个非常了解Java和内存问题的人的建议. 我有一个大文件(大约1.5GB),我需要将此文件切成许多小文件(例如100个小文件). 我通常知道如何做到这一点(使用BufferedReader), ...

  7. 打包部署后无法读取jar包里的文件(实测可行,Java中读取jar包中的文件)

    打包部署后无法读取jar包里的文件 Java中读取jar包中的文件 linux中无法读取jar包中的内容(windows可以的!),如何解决 一.背景 项目中免不了需要读取文件,如果文件用绝对路径读取 ...

  8. python pandas写入数据后保存_python读取MySQL数据使用pandas写入到csv,并保存列名

    实现的功能:通过pymysql连接MySQL数据库,查询所需数据,然后使用pandas写入到csv文件,并且写入包含数据列名. import sys import pandas as pd impor ...

  9. python对文本数据进行采样_Python对wav文件的重采样实例

    例如从2channel,4.41k hz 重采样到 1 channel,16k hz def downsampleWav(src, dst, inrate=44100, outrate=16000, ...

最新文章

  1. jenkins ssl证书报错问题解决
  2. 黄聪:TortoiseGit(乌龟git)保存用户名密码的方法
  3. 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串
  4. git fock的子项目从上游仓库(源项目)同步更新
  5. 云图说|初识ModelArts开发者生态社区——AI Gallery
  6. 表格数据的识别与提取
  7. Tensorflow 搭建自己的神经网络(四)
  8. Java实现json对比(递归)
  9. 罗克露计算机组成,罗克露计算机组成原理课件(一)
  10. 渗透函数实现排序的函数层次聚类或者叫做凝
  11. 外贸常用术语_外贸业务中常用的术语
  12. 通过EasyPOI导入excel数据
  13. python和工程造价_不会Python的将慢慢被淘汰!
  14. webstorm自定义文件模板
  15. Kaggle泰坦尼克号预测——Last
  16. 你会给论文正确加引用吗?
  17. 企业微信集成EAS流程助手
  18. 云测试软件详解,云计算存储测试:FIO工具入门与实战
  19. python数据分析基础试题_Python数据分析基础知识
  20. 哈工大计算机专硕和学硕学费,毕业后才知道,学硕和专硕截然不同,选错的学生悔不当初...

热门文章

  1. Kafka的生成者、消费者、broker的基本概念
  2. 这款图片剪裁开源项目,简直逆天了
  3. 计算机辅助教学常用的教学模式,计算机辅助教学的“两种模式”
  4. 如果《让子弹飞》里吃凉粉的是郭德纲,会怎么样?
  5. spring框架测试题
  6. 有奖讨论| 感恩,老师您辛苦了!
  7. 图像色彩通道分离与合并--opencv学习笔记
  8. 程序猿 MVC常规面试题
  9. C++ 学习之查找算法adjacent_find(相邻重复查找)、binary_search(二分法查找)
  10. 中国电子学会2022年06月份青少年软件编程Scratch图形化等级考试试卷二级真题(含答案)