想写一个收集文件夹内文件的代码,按文件名和时间分列在一个excel里

我想做一个能把指定文件夹内的txt文件收集到一个excel文件里面,文件内容是股票名称和代码,代码是在括号里面,文件名字也有括号和代码,汉字,按文件的名字和文件的时间,把文件内容收集分列在一个文件里。
然后发起过提问,按照改了改,成这样。只能跑到文件名,之后的excel并没有出现。不知道为什么,

以下是代码

import os
import re

import pandas as pd

# 遍历文件夹中的文件
folder_path = r"D:\各种模\选股结果"
file_list=[]
for i in os.listdir ( folder_path ):
    if i.endswith('.txt'):
        file_list.append(i)
        #stock_data=pd.read_table(path,sep='@lms@',encoding='utf-16',engine='python')
        #    for j in stock_data:
        #stock_data=loa
        #stock_data.findall(r'\d+',stock_data)
        print(i)
columns=['date','name','code','file_name','file_date']
df=pd.DataFrame(columns=columns)
for file_name in file_list:
    file_path=os.path.join(folder_path,file_name)
    with open(file_path,"r" ,encoding='gbk', errors='ignore') as file:
        file_content=file.read()
        match=re.search(r"(.*)\((.*)\)",file_content)

        if match:
            name,code=match.groups()
            date = pd.Timestamp.now()
            file_date=os.path.getmtime(file_path)
            df=df.append({'date':date,'name':name,'code':code,'file_name':file_name,'file_date':file_date},ignore_index=True)
            
with pd.ExcelWriter("output.xlsx")as writer:
    df.to_excel(writer,sheet_name='Sheet1')
#print ( get_FileCreateTime ( path ) )


题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。


好的,以下是Python代码示例:

import os
import xlwt
import datetime

# 获取指定文件夹内的所有文件名及其创建时间
def get_files(folder_path):
    files = os.listdir(folder_path)
    result = []
    for file in files:
        filepath = os.path.join(folder_path, file)  # 获取文件的完整路径
        if os.path.isfile(filepath):  # 判断是否为文件
            filetime = datetime.datetime.fromtimestamp(os.path.getctime(filepath))  # 获取文件创建时间
            result.append((file, filetime))
    return result

# 将文件信息保存到Excel中
def save_to_excel(files, filepath):
    wb = xlwt.Workbook(encoding='utf-8')
    sheet = wb.add_sheet('File List')
    sheet.write(0, 0, 'File Name')
    sheet.write(0, 1, 'Create Time')
    row = 1
    for file in files:
        sheet.write(row, 0, file[0])
        sheet.write(row, 1, file[1].strftime('%Y-%m-%d %H:%M:%S'))
        row += 1
    wb.save(filepath)

if __name__ == '__main__':
    folder_path = '/path/to/folder'  # 指定文件夹路径
    excel_path = 'file_list.xls'  # 指定生成的Excel文件路径
    files = get_files(folder_path)  # 获取文件信息
    save_to_excel(files, excel_path)  # 保存到Excel中

你需要将其中的/path/to/folder改为你要操作的文件夹路径,file_list.xls改为你要生成的Excel文件名。运行代码后,就会在当前目录下生成一个名为file_list.xls的文件,文件中包含了每个文件的文件名和创建时间。

结合GPT给出回答如下请题主参考
可以使用Python来实现这个功能。具体实现步骤如下:

  1. 导入必要的模块
import os
import xlwt    # 用于写入Excel文件
from datetime import datetime    # 用于格式化时间
  1. 定义函数收集文件信息
def collect_files_info(folder_path):
    # 遍历文件夹
    files = os.listdir(folder_path)

    # 将txt文件信息收集到列表中
    txt_files = []
    for file in files:
        if file.endswith(".txt"):
            txt_files.append(file)

    # 将文件信息转化为字典
    files_info = {}
    for file in txt_files:
        file_path = os.path.join(folder_path, file)
        file_name = os.path.splitext(os.path.basename(file_path))[0]    # 获取文件名,不含文件扩展名
        file_time = datetime.fromtimestamp(os.path.getmtime(file_path)).strftime('%Y-%m-%d %H:%M:%S')    # 获取文件修改时间
        with open(file_path) as f:
            file_content = f.read()
        stock_name = file_content.split("(")[0].strip()    # 获取股票名称
        stock_code = file_content.split("(")[1].split(")")[0]    # 获取股票代码
        files_info[file_name] = {'time': file_time, 'name': stock_name, 'code': stock_code}

    return files_info
  1. 将文件信息写入Excel文件
def write_to_excel(files_info):
    # 创建Excel文件
    wb = xlwt.Workbook()
    ws = wb.add_sheet('files')

    # 写入表头
    ws.write(0, 0, '文件名')
    ws.write(0, 1, '修改时间')
    ws.write(0, 2, '股票名称')
    ws.write(0, 3, '股票代码')

    # 写入文件信息
    row = 1
    for file_name, file_info in files_info.items():
        ws.write(row, 0, file_name)
        ws.write(row, 1, file_info['time'])
        ws.write(row, 2, file_info['name'])
        ws.write(row, 3, file_info['code'])
        row += 1

    # 保存Excel文件
    wb.save('file_info.xls')
  1. 主程序入口
if __name__ == '__main__':
    # 指定文件夹路径
    folder_path = 'path/to/your/folder'

    # 收集文件信息
    files_info = collect_files_info(folder_path)

    # 将文件信息写入Excel文件
    write_to_excel(files_info)

这个程序将会把指定文件夹内的txt文件的信息收集到一个名为file_info.xls的Excel文件中,文件名、修改时间、股票名称和股票代码将分列在一个文件中。可以根据需要修改Excel文件名和表格名称等参数。

根据您提供的代码,有几个问题可能导致excel文件没有生成:

  1. 没有安装必要的依赖项:请确保您已经安装了 pandas 库。您可以使用以下命令在终端或命令提示符中安装它:
pip install pandas
  1. df.to_excel() 语句没有被执行:请确保 df.to_excel() 语句没有被注释掉或者没有执行到。您可以取消注释 df.to_excel() 语句并验证是否执行到了。

另外,您的代码有一些不必要的注释行,可以删除以提高代码可读性。以下是修改后的代码:

import os
import re
import pandas as pd

folder_path = r"D:\各种模\选股结果"
file_list = []
for i in os.listdir(folder_path):
    if i.endswith('.txt'):
        file_list.append(i)
        print(i)

columns = ['date', 'name', 'code', 'file_name', 'file_date']
df = pd.DataFrame(columns=columns)
for file_name in file_list:
    file_path = os.path.join(folder_path, file_name)
    with open(file_path, "r", encoding='gbk', errors='ignore') as file:
        file_content = file.read()
        match = re.search(r"(.*)\((.*)\)", file_content)
        if match:
            name, code = match.groups()
            date = pd.Timestamp.now()
            file_date = os.path.getmtime(file_path)
            df = df.append({'date': date, 'name': name, 'code': code, 'file_name': file_name, 'file_date': file_date}, ignore_index=True)

with pd.ExcelWriter("output.xlsx") as writer:
    df.to_excel(writer, sheet_name='Sheet1')

请尝试运行修改后的代码,看看是否能够生成正确的excel文件。如果问题仍然存在,请提供更多的错误信息以便我更好地帮助您解决问题。

可以给出一个文件案例。

整个逻辑不复杂,就是读取数据文件,合并到另一个数据文件中。你看下是不是代码的数据处理逻辑和你的excel文件中的数据格式不一致导致的,可以调试下代码,没有成功写入excel的话,有很可能还是代码中的那个df没有获取到数据

能不能提供一下股票数据的格式,你写的我有点看不懂,能不能给图片

引用 皆我百晓生 小程序回复内容作答:

您的代码已经基本实现了按文件名和时间分列在一个Excel文件中。在您的代码中,文件内容的收集部分应该放在遍历文件夹中的循环中,以便每个文件的内容都能被收集到DataFrame中。另外,请确保您的文件夹路径正确,并且文件夹中确实存在需要处理的txt文件。

以下是修改后的代码:

import os
import re
import pandas as pd

# 遍历文件夹中的文件
folder_path = r"D:\各种模\选股结果"
file_list = []
for i in os.listdir(folder_path):
    if i.endswith('.txt'):
        file_list.append(i)

columns = ['date', 'name', 'code', 'file_name', 'file_date']
df = pd.DataFrame(columns=columns)

for file_name in file_list:
    file_path = os.path.join(folder_path, file_name)
    with open(file_path, "r", encoding='gbk', errors='ignore') as file:
        file_content = file.read()
        match = re.search(r"(.*)\((.*)\)", file_content)

        if match:
            name, code = match.groups()
            date = pd.Timestamp.now()
            file_date = os.path.getmtime(file_path)
            df = df.append({'date': date, 'name': name, 'code': code, 'file_name': file_name, 'file_date': file_date},
                           ignore_index=True)

with pd.ExcelWriter("output.xlsx") as writer:
    df.to_excel(writer, sheet_name='Sheet1')

请确保您的Python环境中已经安装了pandas模块,如果没有安装,可以使用以下命令进行安装:

pip install pandas

另外,对于文件的编码问题,原代码中使用的是gbk编码,如果您的文件是UTF-8编码的,请修改为utf-8编码。

import os
import re
import datetime

import pandas as pd

# 遍历文件夹中的文件
folder_path = r"D:\各种模\选股结果"
file_list=[]
for i in os.listdir ( folder_path ):
    if i.endswith('.txt'):
        file_list.append(i)
        print(i)
columns=['date','name','code','file_name','file_date']
df=pd.DataFrame(columns=columns)
for file_name in file_list:
    file_path=os.path.join(folder_path,file_name)
    with open(file_path,"r" ,encoding='gbk', errors='ignore') as file:
        file_content=file.read()
        matches=re.findall(r"(.*)\((.*)\)",file_content) # 使用re.findall获取所有匹配结果

        for match in matches: # 使用循环遍历所有匹配结果
            name,code=match
            date = pd.Timestamp.now().date() # 使用pd.Timestamp.now().date()获取不带时区信息的日期
            file_date=datetime.datetime.fromtimestamp(os.path.getmtime(file_path)) # 使用datetime.datetime.fromtimestamp转换文件修改时间为日期格式
            df=df.append({'date':date,'name':name,'code':code,'file_name':file_name,'file_date':file_date},ignore_index=True)
            
with pd.ExcelWriter("output.xlsx")as writer:
    df.to_excel(writer,sheet_name='Sheet1')


参考gpt
根据您提供的代码,我注意到您的问题可能出在文件路径的处理上。您可以尝试使用绝对路径来确保文件能够正确地找到。

此外,我还注意到您在使用正则表达式提取文件内容时,可能需要对匹配的结果进行进一步处理。根据您的描述,文件内容中的股票名称和代码是在括号中的,您可以使用正则表达式的findall方法来提取所有匹配的内容。

下面是修改后的代码,希望能帮助您解决问题:

import os
import re
import pandas as pd

# 遍历文件夹中的文件
folder_path = r"D:\各种模\选股结果"
file_list = []
for i in os.listdir(folder_path):
    if i.endswith('.txt'):
        file_list.append(i)
        print(i)

columns = ['date', 'name', 'code', 'file_name', 'file_date']
df = pd.DataFrame(columns=columns)

for file_name in file_list:
    file_path = os.path.join(folder_path, file_name)
    with open(file_path, "r", encoding='gbk', errors='ignore') as file:
        file_content = file.read()
        matches = re.findall(r"\((.*?)\)", file_content)
        if len(matches) >= 2:
            name, code = matches[:2]
            date = pd.Timestamp.now()
            file_date = os.path.getmtime(file_path)
            df = df.append({'date': date, 'name': name, 'code': code, 'file_name': file_name, 'file_date': file_date},
                           ignore_index=True)

with pd.ExcelWriter("output.xlsx") as writer:
    df.to_excel(writer, sheet_name='Sheet1')

请注意,上述代码仅为示例,您需要根据您的具体文件内容和需求进行适当的修改和调整。

用openpyxl库写出Excel就可以了

参考结合AI智能、文心一言等综合回答,若有帮助,恭请采纳。

这个需求可以通过编写Python程序来实现。下面是一个基本的实现框架,你可以根据自己的具体需求来进行修改和优化。

  1. 首先,需要通过Python的os模块来获取指定文件夹内的所有txt文件列表。
import os

txt_files = []
dir_path = "/path/to/your/directory"
for file in os.listdir(dir_path):
    if file.endswith(".txt"):
        txt_files.append(os.path.join(dir_path, file))
  1. 接下来,需要将每个txt文件中的股票名称和代码提取出来,并保存到一个列表或字典中。
import re

stocks = []
for file in txt_files:
    with open(file, "r", encoding="utf8") as f:
        lines = f.readlines()
        for line in lines:
            # 使用正则表达式匹配股票名称和代码
            pattern = r"([\u4e00-\u9fa5]+)\((\d+)\)"
            match = re.search(pattern, line)
            if match:
                stock_name = match.group(1)
                stock_code = match.group(2)
                stocks.append({"name": stock_name, "code": stock_code})
  1. 最后,将提取出来的股票名称和代码按照文件名和时间排序,并保存到Excel文件中。
import pandas as pd

# 按照文件名和时间排序
sorted_files = sorted(txt_files, key=lambda x: (os.path.basename(x), os.path.getmtime(x)))

# 创建一个空的DataFrame
df = pd.DataFrame(columns=["name", "code", "filename", "time"])

# 将股票信息和文件信息保存到DataFrame中
for file in sorted_files:
    filename = os.path.basename(file)
    timestamp = os.path.getmtime(file)
    for stock in stocks:
        df = df.append({"name": stock["name"], "code": stock["code"], "filename": filename, "time": timestamp}, ignore_index=True)

# 将DataFrame保存到Excel文件中
output_file = "/path/to/your/output_file.xlsx"
df.to_excel(output_file, index=False)

以上是一个基本的实现框架,你可以根据具体需求进行修改和优化,比如根据股票代码排序、去除重复的股票信息等等。

写出Excel用openpyxl库比较好用

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^