Python 3.x Python3读写csv文件并使用dict打印行
我正在阅读巨大的csv文件,最后一行是日期和时间。 我写了下面的代码,寻找增强或优化的解决方案 以下是我的数据: 2067458,XXXXXXXXXXXXX,1006386100.79.94.1,XXXX4,1,0,0,1,0,1,“XXXXX”,现场,“未知”,未知,未知,未知,未知,路由器没有无线电, 未知,未知,未知,未知,未知,2017-01-2416:03:43, , 这是我的密码Python 3.x Python3读写csv文件并使用dict打印行,python-3.x,csv,Python 3.x,Csv,我正在阅读巨大的csv文件,最后一行是日期和时间。 我写了下面的代码,寻找增强或优化的解决方案 以下是我的数据: 2067458,XXXXXXXXXXXXX,1006386100.79.94.1,XXXX4,1,0,0,1,0,1,“XXXXX”,现场,“未知”,未知,未知,未知,未知,路由器没有无线电, 未知,未知,未知,未知,未知,2017-01-2416:03:43, , 这是我的密码 import csv import datetime import re input_file = '
import csv
import datetime
import re
input_file = 'input22.csv'
output_file= 'temp.csv'
def main():
with open(input_file,"r") as fileHandle:
CSVreader = fileHandle.readlines()
fileHandle.close()
reader = CSVreader[-1]
with open ('temp.csv',"w") as fileHandle:
fileHandle.write(reader)
fileHandle.close()
with open('temp.csv') as temp_file:
readCSV = csv.reader(temp_file, delimiter=',')
for row in readCSV:
Date=(row[22])
Time=(row[23])
D=Date.strip()
T=Time.strip()
print ("{} {}".format(D,T))
main()
我在代码中立即看到了一些问题——使用
with
块打开文件时,无需关闭文件。使用上下文的全部意义在于,一旦离开块,文件就被关闭
Eg
应该是,
with open ('temp.csv',"w") as fileHandle:
fileHandle.write(reader)
就这样!Python为您处理关闭文件的操作
接下来,不要使用fh.readlines()
。这会将整个文件读入内存,如果文件太大而无法放入内存,可能会导致计算机崩溃。相反在这种情况下,这看起来像
with open(input_file, "r") as fileHandle:
CSVreader = csv.reader(fileHandle)
for row in CSVreader:
# do something with the row
Python将自动缓冲您的读取,并且一次只在内存中保留文件的一小部分。旁注:按照您目前的方式,您正在将整个文件读入CSVreader
,它实际上应该被称为rows
或其他什么,因为这不是读取器
对象
最后,无需在第一个实例中将模式传递给open()
调用——您可以使用第二次打开temp.csv
时使用的相同语法
我相信这个(未经测试的)代码片段与您的代码片段实现了相同的功能,更加简洁高效
import csv
import datetime
import re
input_file = 'input22.csv'
output_file= 'temp.csv'
def main():
last = list() # scope this variable so that we may use it after the files have been closed
with open(input_file) as input_fh, \
open('temp.csv', 'w') as output_fh:
reader = csv.reader(input_fh)
writer = csv.writer(output_fh)
# discard everything except the last line of output
for row in reader:
last = row
writer.write(last)
# print that last row with formatting
D=last[22].strip()
T=last[23].strip()
print ("{} {}".format(D,T))
main()
您可以使用
pandas
在一行中直接读取csv并将任何列输出。您试图完成什么?感谢您的代码,您提出了我的主要问题,即在一个变量中缓冲完整的行。以下代码适用于writer.writerows(last)。
import csv
import datetime
import re
input_file = 'input22.csv'
output_file= 'temp.csv'
def main():
last = list() # scope this variable so that we may use it after the files have been closed
with open(input_file) as input_fh, \
open('temp.csv', 'w') as output_fh:
reader = csv.reader(input_fh)
writer = csv.writer(output_fh)
# discard everything except the last line of output
for row in reader:
last = row
writer.write(last)
# print that last row with formatting
D=last[22].strip()
T=last[23].strip()
print ("{} {}".format(D,T))
main()