我想做一个能把指定文件夹内的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来实现这个功能。具体实现步骤如下:
import os
import xlwt # 用于写入Excel文件
from datetime import datetime # 用于格式化时间
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
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')
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文件没有生成:
pandas
库。您可以使用以下命令在终端或命令提示符中安装它:pip install pandas
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程序来实现。下面是一个基本的实现框架,你可以根据自己的具体需求来进行修改和优化。
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))
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})
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库比较好用
【相关推荐】