Python-- 读取文件夹下所有Excel的最后一行写入新文件

实验背景:

让工作自动化,这是很多人的在纷繁复杂的工作环境中想要达到的,尤其是一些大量的重复性劳动。而程序员则被大家认为可以实现这一目标的首选人群。这不,就有人让我来帮忙处理一堆Excel表格了。
(眼高手低的我觉得这个 so easy, 应声接下。却意外的折腾了好久。。。)

实验目标:

读取文件夹下所有Excel表格(CSV格式)的最后一行写入新文件。

实验步骤

流程图

代码程序

1. 遍历文件夹

#遍历文件夹
def getFileName(filepath):
    file_list = []
    for root,dirs,files in os.walk(filepath):
        for filespath in files:
            print(os.path.join(root,filespath))
            file_list.append(os.path.join(root,filespath))

    return file_list

2. 获取文件最后一行非空行

#获取文件最后一行非空行
def get_file_last_line(inputfile):
    filesize = os.path.getsize(inputfile)
    blocksize = 1024
    with open(inputfile, 'r') as f:
        last_line = ""
        if filesize > blocksize:
            maxseekpoint = (filesize // blocksize)
            f.seek((maxseekpoint - 1) * blocksize)
        elif filesize:
            f.seek(0, 0)
        lines = f.readlines()
        if lines:
            lineno = 1
            while last_line == "":
                last_line = lines[-lineno].strip()
                lineno += 1
        print (last_line)
        return last_line 

3.写入新文件

def write_csv(data):
    
    with open(outfile,'a+') as f:
    	#这里要加上delimiter=‘,’ 表示以逗号作为分隔符,将读取到的数据重新写入新文件
        csv_write = csv.writer(f,delimiter=',')
     
        csv_write.writerow((str(data),))

open()函数参数说明
r 只能读,即带r的文件必须先存在
r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容
w+ 可读可写 如果文件存在 则覆盖整个文件不存在则创建 ,要close 之后才算完成写入
w 只能写 覆盖整个文件 不存在则创建
a 只能写 从文件底部添加内容 不存在则创建
a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建
r+可读可写,不会创建不存在的文件。如果直接写文件,则从顶部开始写,覆盖之前此位置的内容,如果先读后写,则会在文件最后追加内容。

r、rb、rt区别

使用’r’一般情况下最常用的,但是在进行读取二进制文件时,可能会出现文档读取不全的现象;

使用’rb’按照二进制位进行读取的,不会将读取的字节转换成字符,二进制文件用二进制读取用’rb’ ;

rt模式下,python在读取文本时会自动把\r\n转换成\n,文本文件用二进制读取用‘rt’;

中间遇到的问题
写到文件中的数据分隔的不正确,
本来是这样的数据82.1875,41.99480057,1689,11.79143657,1
在这里插入图片描述
由于最开始是这样写的

 csv_write = csv.writer(f)
 
 csv_write.writerow(data)

然后写到表中的数据就成了这样。。
每个数据单独在一格。
在这里插入图片描述
逗号分隔符
使用逗号分隔符,下面一行不改,左右数据却都写在了第一列。
csv_write = csv.writer(f,delimiter=’,’)

在这里插入图片描述
最后一行修改为下面代码,.将其作为一个元组

writer.writerow((str(row),))
总算OK了。。

4 程序

#!/usr/bin/env python3
# coding=utf-8
import pandas as pd
import os
import os.path
import csv

from xlutils.copy import copy

def getFileName(filepath):
    file_list = []
    for root,dirs,files in os.walk(filepath):
        for filespath in files:
            print(os.path.join(root,filespath))
            file_list.append(os.path.join(root,filespath))

    return file_list


#last line
def get_file_last_line(inputfile):
    filesize = os.path.getsize(inputfile)
    blocksize = 1024
    with open(inputfile, 'r') as f:
        last_line = ""
        if filesize > blocksize:
            maxseekpoint = (filesize // blocksize)
            f.seek((maxseekpoint - 1) * blocksize)
        elif filesize:
            f.seek(0, 0)
        lines = f.readlines()
        if lines:
            lineno = 1
            while last_line == "":
                last_line = lines[-lineno].strip()
                lineno += 1
        print (last_line)
        return last_line     
     


def MergeExcel(filepath,outfile):
    #df=pd.read_csv(outfile,  engine='python')
    
    file_list=getFileName(filepath) 

    print (len(file_list))

    for each in file_list:
        
        data = get_file_last_line(each)
        write_csv(data)
  

def write_csv(data):
    
    with open(outfile,'a+') as f:
        csv_write = csv.writer(f,delimiter=',')
       
      
        csv_write.writerow((str(data),))
        
if __name__ == '__main__':

    filepath='/home//file/table_file'
    outfile = '/home//file/result.csv'
    MergeExcel(filepath, outfile)
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 实现批量读取同一文件夹下所有excel指定单元格内容并写入单元格的方法如下: 1. 导入必要的库: ``` python import os import openpyxl ``` 2. 定义一个函数,用于读取指定单元格内容并将其写入单元格: ``` python def read_write_cell(file_path, sheet_name, source_cell, target_cell): # 打开excel文件 wb = openpyxl.load_workbook(file_path) # 选择指定的sheet sheet = wb[sheet_name] # 读取指定单元格的内容 source_value = sheet[source_cell].value # 写入单元格 sheet[target_cell] = source_value # 保存文件 wb.save(file_path) # 关闭文件 wb.close() ``` 3. 获取指定文件夹下所有excel文件的路径,并调用read_write_cell函数进行读写操作: ``` python # 指定文件夹路径 folder_path = '文件夹路径' # 遍历文件夹中所有文件 for filename in os.listdir(folder_path): if filename.endswith('.xlsx') or filename.endswith('.xls'): # 构建完整的文件路径 file_path = os.path.join(folder_path, filename) # 执行读写操作,例如将A1单元格的内容写入B1单元格 read_write_cell(file_path, 'Sheet1', 'A1', 'B1') ``` 以上代码会遍历指定文件夹下的所有excel文件,然后读取指定单元格的内容,并将其写入的单元格中。你可以根据自己的需求,修改read_write_cell函数中的参数来选择读取和写入的单元格位置。 ### 回答2: 批量读取同一文件夹下所有Excel文件的指定单元格内容,并将其写入的单元格,可以使用Python中的pandas和openpyxl库来实现。 首先,需要安装pandas和openpyxl库。在命令行中使用以下命令安装: ```python pip install pandas openpyxl ``` 然后,使用以下代码来实现批量读取和写入操作: ```python import pandas as pd import os # 指定文件夹路径 folder_path = '指定文件夹路径' # 获取文件夹中所有的Excel文件 files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')] # 遍历每个Excel文件 for file in files: # 构造文件路径 file_path = os.path.join(folder_path, file) # 读取Excel文件 df = pd.read_excel(file_path, sheet_name='Sheet1') # 假设需要获取的单元格在Sheet1中 # 获取指定单元格内容 cell_value = df.at[1, 'A'] # 假设需要获取的单元格是A2 # 将内容写入单元格(假设需要写入的单元格是B2) df.at[1, 'B'] = cell_value # 保存修改后的Excel文件 df.to_excel(file_path, index=False) ``` 这段代码会遍历指定文件夹下的每一个Excel文件,读取每个文件的指定单元格内容,将其写入的单元格,并保存修改后的Excel文件。 需要注意的是,代码中的`sheet_name`参数需要指定要读取的工作表名称,`at`方法中的行和列需要根据实际需求进行调整。 另外,在使用这段代码之前,请确保文件夹路径中只包含需要处理的Excel文件,否则可能会导致错误。 ### 回答3: 要批量读取同一文件夹下的所有Excel文件的指定单元格内容,并将其写入的单元格,可以使用Python编程语言和pandas库来实现。 首先,我们需要导入所需的库: ```python import os import pandas as pd ``` 然后,我们可以定义一个函数来实现读取和写入操作: ```python def read_and_write_excel(file_path, sheet_name, read_cell, write_cell): df = pd.read_excel(file_path, sheet_name=sheet_name) content = df.loc[0, read_cell] df.loc[0, write_cell] = content df.to_excel(file_path, index=False) ``` 在这个函数中,我们首先使用`pd.read_excel()`方法读取Excel文件的指定工作表。然后,我们使用`df.loc[]`方法来获取指定单元格的内容。将获取到的内容写入单元格中,再使用`df.to_excel()`方法将修改后的数据保存回Excel文件中。 接下来,我们可以编写一个遍历文件夹中所有Excel文件的函数,并调用之前定义的函数批量处理: ```python def batch_process_folder(folder_path, sheet_name, read_cell, write_cell): files = os.listdir(folder_path) for file in files: if file.endswith(".xlsx") or file.endswith(".xls"): file_path = os.path.join(folder_path, file) read_and_write_excel(file_path, sheet_name, read_cell, write_cell) ``` 在这个函数中,我们使用`os.listdir()`方法获取文件夹中的所有文件,并使用`os.path.join()`方法构建每个Excel文件的完整路径。然后,根据文件的扩展名来判断是否为Excel文件,如果是的话则调用之前定义的`read_and_write_excel()`函数进行处理。 最后,我们只需要提供文件夹路径、工作表名、读取单元格地址和写入单元格地址作为参数调用`batch_process_folder()`函数即可实现批量读取并写入Excel文件中指定单元格的内容。 以下是一个具体的示例: ```python folder_path = "文件夹路径" sheet_name = "工作表名" read_cell = "读取单元格地址" write_cell = "写入单元格地址" batch_process_folder(folder_path, sheet_name, read_cell, write_cell) ``` 请注意,上述示例中的读取单元格地址和写入单元格地址应按照Excel的命名约定进行书写,例如:"A1"表示第1行第1列的单元格。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值