python写数据到文件一次只能写一个数据

Python051

python写数据到文件一次只能写一个数据,第1张

python写数据文件一次只能写一个数据原因如下:

1、代码在第一次循环中将文件关闭了,因此后边的数据写不进去。

2、文件内容不完整,要写入的数据内容依然在缓冲区中,没有写入文件。

python用for循环遍历文件操作,代码如下:

#!\urs\bin\env python

#encoding:utf-8       #设置编码方式  

import os

import re

class loop_file:

    def __init__(self, root_dir, short_exclude=[], long_exclude=[], file_extend=[]):

        self.root_dir = root_dir

        self.short_exclude = short_exclude

        self.long_exclude = long_exclude

        self.file_extend = file_extend

    def __del__(self):

        pass

    def start(self, func):

        self.func = func

        return self.loop_file(self.root_dir)    

    def loop_file(self, root_dir):

        t_sum = []

        sub_gen = os.listdir(root_dir)

        for sub in sub_gen:

            is_exclude = False

            for extends in self.short_exclude:  ##在不检查文件、目录范围中

                if extends in sub:              ##包含特定内容

                    is_exclude = True

                    break

                if re.search(extends, sub):     ##匹配指定正则

                    is_exclude = True

                    break                    

            if is_exclude:

                continue            

            abs_path = os.path.join(root_dir, sub)

            is_exclude = False

            for exclude in self.long_exclude:

                if exclude == abs_path[-len(exclude):]:

                    is_exclude = True

                    break

            if is_exclude:

                continue

            if os.path.isdir(abs_path):

                t_sum.extend(self.loop_file(abs_path))

            elif os.path.isfile(abs_path):            

                if not "." + abs_path.rsplit(".", 1)[1] in self.file_extend:  ##不在后缀名 检查范围中

                    continue

                t_sum.append(self.func(abs_path))

        return t_sum    

if '__main__'==__name__:

    root_dir = r'D:\harness\newshoppingcart\testcase\promo\single_promo'

    short_exclude = ['.svn', '.*_new.rb']     ###不包含检查的短目录、文件

    long_exclude = []                         ###不包含检查的长目录、文件

    file_extend = ['.rb']                     ###包含检查的文件类型

    lf = loop_file(root_dir, short_exclude, long_exclude, file_extend)

    for f in lf.start(lambda f: f):

        print f

我改了一下你的代码,实测是可以从 a.csv复制到 b.csv中

import csv

def foo():

with open('a.csv', 'r') as f:

reader = csv.DictReader(f)

rows = [row for row in reader]

if not rows:

return

with open('b.csv', mode='w', newline='', errors='ignore') as f2:

for index, row in enumerate(rows):

if index == 0:

f_csv = csv.DictWriter(f2, fieldnames=list(row.keys()))

f_csv.writeheader()

f_csv.writerow(row)

if __name__ == '__main__':

foo()