用python在csv文件中按列追加日期

用python在csv文件中按列追加日期,python,Python,我有一个脚本,它遍历给定路径(“C:\Users\Razvi\Desktop\italia”)中的所有文件,从每个名为“cnt.csv”的文件中读取行数,然后在另一个名为“counters.csv”的文件中写入当前日期+文件夹名称+在“cnt.csv”中找到的行数总和 现在输出文件(“counters.csv”)如下所示: 30/9/2017 8dg5 5 8dg7 7 01/10/2017 8dg5 8 8dg7 10 其中名称8dg5和8dg7是脚本找到

我有一个脚本,它遍历给定路径(“C:\Users\Razvi\Desktop\italia”)中的所有文件,从每个名为“cnt.csv”的文件中读取行数,然后在另一个名为“counters.csv”的文件中写入当前日期+文件夹名称+在“cnt.csv”中找到的行数总和

现在输出文件(“counters.csv”)如下所示:

30/9/2017   
8dg5    5
8dg7    7

01/10/2017  
8dg5    8
8dg7    10
其中名称8dg5和8dg7是脚本找到文件“cnt.csv”A的文件夹,数字5、7、8、10是每次运行脚本时csv文件中找到的行的总和,显然是每次运行脚本时附加的日期

现在我想要的是用csv写下这些日期,以某种方式附加在列上,而不是行上,类似这样:

30/9/2017   01/10/2017
8dg5    5   8dg5    8
8dg7    7   8dg7    10
代码如下:

import re
import os
from datetime import datetime

#italia =r'C:\Users\timraion\Desktop\italia'
italia =r'C:\Users\Razvi\Desktop\italia'
file = open(r'C:\Users\Razvi\Desktop\counters.csv', 'a')
now=datetime.now()
dd=str(now.day)
mm=str(now.month)
yyyy=str(now.year)
date=(dd + "/" + mm + "/" + yyyy)
file.write(date + '\n')
for filename in os.listdir(italia):
    infilename = os.path.join(italia, filename)
    for files in os.listdir(infilename):
        if files.endswith("cnt.csv"):
            result=os.path.join(infilename,"cnt.csv")
            print(result)
            infilename2 = os.path.join(infilename, files)
            lines = 0
            for line in open(infilename2):
                    lines += 1



            file = open(r'C:\Users\Razvi\Desktop\counters.csv', 'a')
            file.write(str(filename) +","+ str(lines)+"\n" )
            file.close()

谢谢

如果要将新条目添加为列,而不是向下添加行,则每次都必须读取
counters.csv
文件,追加列,然后重写它

import os
from datetime import datetime
import csv

italia =r'C:\Users\Razvi\Desktop\italia'
counts = []
for filename in os.listdir(italia):
    infilename = os.path.join(italia, filename)
    for files in os.listdir(infilename):
        if files.endswith("cnt.csv"):
            result=os.path.join(infilename,"cnt.csv")
            print(result)
            infilename2 = os.path.join(infilename, files)
            lines = 0
            for line in open(infilename2):
                lines += 1
            counts.append((filename, lines))  # save the filename and count for later
if os.path.exists(r'C:\Users\Razvi\Desktop\counters.csv'):
    with open(r'C:\Users\Razvi\Desktop\counters.csv', 'r') as csvfile:
        counters = [row for row in csv.reader(csvfile)]    # read the csv file
else:
    counters = [[]]
now=datetime.now()
# Add the date and a blank cell to the first row
counters[0].append('{}/{}/{}'.format(now.day, now.month, now.year))
counters[0].append('')
for i, count in enumerate(counts):
    if i + 1 == len(counters):    # check if we need to add a row
        counters.append(['']*(len(counters[0])-2))
    while len(counters[i+1]) < len(counters[0]) - 2:
        counters[i+1].append('')  # ensure there are enough columns in the row we're on
    counters[i+1].extend(count)    # Add the count info as two new cells
with open(r'C:\Users\Razvi\Desktop\counters.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)    # write the new csv file
    for row in counters:
        writer.writerow(row)
导入操作系统
从日期时间导入日期时间
导入csv
italia=r'C:\Users\Razvi\Desktop\italia'
计数=[]
对于os.listdir(斜体)中的文件名:
infilename=os.path.join(斜体,文件名)
对于os.listdir(infilename)中的文件:
如果文件.endswith(“cnt.csv”):
结果=os.path.join(infilename,“cnt.csv”)
打印(结果)
infilename=os.path.join(infilename,文件)
直线=0
对于处于打开状态的线(填充2):
行数+=1
counts.append((文件名,行))#保存文件名并计数以备以后使用
如果os.path.exists(r'C:\Users\Razvi\Desktop\counters.csv'):
将open(r'C:\Users\Razvi\Desktop\counters.csv、'r')作为csvfile打开:
计数器=[csv.reader(csvfile)中的行对行]#读取csv文件
其他:
计数器=[]]
now=datetime.now()
#将日期和空白单元格添加到第一行
计数器[0]。追加(“{}/{}/{}.”格式(now.day、now.month、now.year))
计数器[0]。追加(“”)
对于i,枚举中的计数(计数):
如果i+1==len(计数器):#检查是否需要添加行
counters.append(['']*(len(counters[0])-2))
而len(计数器[i+1])

另一个注意事项是,
file
是Python中的内置函数,因此不应将该名称用作变量,因为在代码中可能会出现意外情况。

如果要将新条目添加为列而不是行,则每次都必须读取
counters.csv
文件,添加列,然后重写它

import os
from datetime import datetime
import csv

italia =r'C:\Users\Razvi\Desktop\italia'
counts = []
for filename in os.listdir(italia):
    infilename = os.path.join(italia, filename)
    for files in os.listdir(infilename):
        if files.endswith("cnt.csv"):
            result=os.path.join(infilename,"cnt.csv")
            print(result)
            infilename2 = os.path.join(infilename, files)
            lines = 0
            for line in open(infilename2):
                lines += 1
            counts.append((filename, lines))  # save the filename and count for later
if os.path.exists(r'C:\Users\Razvi\Desktop\counters.csv'):
    with open(r'C:\Users\Razvi\Desktop\counters.csv', 'r') as csvfile:
        counters = [row for row in csv.reader(csvfile)]    # read the csv file
else:
    counters = [[]]
now=datetime.now()
# Add the date and a blank cell to the first row
counters[0].append('{}/{}/{}'.format(now.day, now.month, now.year))
counters[0].append('')
for i, count in enumerate(counts):
    if i + 1 == len(counters):    # check if we need to add a row
        counters.append(['']*(len(counters[0])-2))
    while len(counters[i+1]) < len(counters[0]) - 2:
        counters[i+1].append('')  # ensure there are enough columns in the row we're on
    counters[i+1].extend(count)    # Add the count info as two new cells
with open(r'C:\Users\Razvi\Desktop\counters.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)    # write the new csv file
    for row in counters:
        writer.writerow(row)
导入操作系统
从日期时间导入日期时间
导入csv
italia=r'C:\Users\Razvi\Desktop\italia'
计数=[]
对于os.listdir(斜体)中的文件名:
infilename=os.path.join(斜体,文件名)
对于os.listdir(infilename)中的文件:
如果文件.endswith(“cnt.csv”):
结果=os.path.join(infilename,“cnt.csv”)
打印(结果)
infilename=os.path.join(infilename,文件)
直线=0
对于处于打开状态的线(填充2):
行数+=1
counts.append((文件名,行))#保存文件名并计数以备以后使用
如果os.path.exists(r'C:\Users\Razvi\Desktop\counters.csv'):
将open(r'C:\Users\Razvi\Desktop\counters.csv、'r')作为csvfile打开:
计数器=[csv.reader(csvfile)中的行对行]#读取csv文件
其他:
计数器=[]]
now=datetime.now()
#将日期和空白单元格添加到第一行
计数器[0]。追加(“{}/{}/{}.”格式(now.day、now.month、now.year))
计数器[0]。追加(“”)
对于i,枚举中的计数(计数):
如果i+1==len(计数器):#检查是否需要添加行
counters.append(['']*(len(counters[0])-2))
而len(计数器[i+1])

另一个注意事项,
file
是Python中的一个内置函数,因此您不应该将该名称用作变量,因为在代码的更深处可能会发生意外情况。

我想我无法切片reader对象,因为我遇到了以下错误:Traceback(最近的调用last):file“C:/Users/Razvi/Desktop/poiecte python/basics/dumb things/contor2.py”,第22行,在计数器[0]中追加({}/{}/{}/{})。格式(now.day、now.month、now.year))类型错误:“\u csv.reader”对象不可订阅>>>你有什么想法吗?为什么返回ig字节?计数器=[csv.reader(csvfile)中的行]#读取csv文件_csv.Error:迭代器应该返回字符串,而不是字节(你是在文本模式下打开文件的吗?)是的,我使用的是python 3.6,所以我不知道,你想在这里测量什么长度:如果i+1==len(csv):#检查我们是否需要添加行,我得到这个错误:“module”类型的对象没有len()@Razvan为发布此类错误代码表示歉意。我已经测试了代码,并发布了一个实际运行的答案。我想我无法分割reader对象,因为我遇到了以下错误:回溯(最近一次调用):文件“C:/Users/Razvi/Desktop/poiecte python/basics/dumb things/contor2.py”,第22行,在计数器[0]中“.format(now.day,now.month,now.year))类型错误:“\u csv.reader”对象不可订阅>>>您是否有任何想法a为什么返回IG字节?计数器=[csv.reader(csvfile)中的行对行]#读取csv文件_csv.Error:迭代器应