如何逐行读取多个文本文件并在每个文件后发送到 excel 移动到新列?
How to read multiple text files line by line and send to excel moving to a new column after every file?
我正在构建一个脚本来 运行 重复测试,每个测试都有一个日志文件,该文件将被读取并编译成传播sheet。
每个文件和行的数量将根据时间和所需的迭代而变化。我有一个基本脚本来逐行读取一个文件并将数据粘贴到连续行中的单独 excel 文档中。
from openpyxl import load_workbook
from Test_Parameters import Results_Name
from Downstream import Log_Angle
wb = load_workbook(filename= Results_Name +'.xlsm', read_only=False, keep_vba=True)
ws7 = wb['timeData']
FILE = open('0_Downstream.txt', 'r+')
line = FILE.readline()
N = '2'
while line !="":
print(line)
ws7['A'+N] = line
line = FILE.readline()
N = float(N)
N = (N+1)
N = "%g" % N
wb.save(Results_Name+'.xlsm')
FILE.close()
我需要能够让它循环浏览同一目录中的多个文件,并将结果放在一个单独的列中,而不是最后一个。
类似于下面的sheet:Excel Layout
感谢您的帮助。
import os
cwd = os.getcwd()
for filename in os.listdir(cwd):
if filename.endswith(".txt"):
with open('%s\%s' % (cwd, filename), 'r+') as file:
[DO STUFF]
以上代码允许您迭代当前工作目录中的多个文件(指定类型)。
这有帮助吗?
我的想法与卢克相同(只是打字时间长了一点):
from openpyxl import load_workbook
from Test_Parameters import Results_Name
from Downstream import Log_Angle
import os
def good_name():
wb = load_workbook(filename=Results_Name + '.xlsm', read_only=False, keep_vba=True)
ws7 = wb['timeData']
for path in os.listdir('dir_path'):
# You can use glob here if you have other extensions than .txt
ws = load_sheet(path, ws7)
wb.save(Results_Name + '.xlsm')
def load_sheet(file_path, ws):
with open(file_path, 'r+') as FILE:
# This context manager is a cleaner way to open/close our file handle
line = FILE.readline()
N = '2'
while line !="":
print(line)
ws['A'+N] = line
line = FILE.readline()
N = float(N)
N = (N+1)
N = "%g" % N
return ws
不要使用 ws['A'+N]
进行编程访问。
我认为以下可能接近您想要的:
col_idx = ws.max_column + 1
for row_idx, line in enumerate(file, 1):
if line == "":
break
ws.cell(row=row_idx, col=col_idx, value=line)
wb.save(…)
- 此示例读取 test/txt
中的所有文件
- 为每个文件使用一个新列
- 文件名分配给第 1 行
追加所有阅读行,从第 2 行开始
# List all files in test/txt'
dirName = os.path.join('test', 'txt')
for column,fname in enumerate(os.listdir(dirName),1):
# Column Title = Filename
ws.cell(row=1, column=column, value=fname)
# My Sample Text files are utf-8 encoded
with io.open( os.path.join(dirName, fname),'r', encoding='utf8') as fh:
# Column Data begins on Row 2
for row,line in enumerate(fh,2):
ws.cell(row=row, column=column, value=line)
#end with = closing fh
#end for
测试 Python:3.4.2 - openpyxl:2.4.1 - LibreOffice:4.3.3.2*
我正在构建一个脚本来 运行 重复测试,每个测试都有一个日志文件,该文件将被读取并编译成传播sheet。
每个文件和行的数量将根据时间和所需的迭代而变化。我有一个基本脚本来逐行读取一个文件并将数据粘贴到连续行中的单独 excel 文档中。
from openpyxl import load_workbook
from Test_Parameters import Results_Name
from Downstream import Log_Angle
wb = load_workbook(filename= Results_Name +'.xlsm', read_only=False, keep_vba=True)
ws7 = wb['timeData']
FILE = open('0_Downstream.txt', 'r+')
line = FILE.readline()
N = '2'
while line !="":
print(line)
ws7['A'+N] = line
line = FILE.readline()
N = float(N)
N = (N+1)
N = "%g" % N
wb.save(Results_Name+'.xlsm')
FILE.close()
我需要能够让它循环浏览同一目录中的多个文件,并将结果放在一个单独的列中,而不是最后一个。 类似于下面的sheet:Excel Layout
感谢您的帮助。
import os
cwd = os.getcwd()
for filename in os.listdir(cwd):
if filename.endswith(".txt"):
with open('%s\%s' % (cwd, filename), 'r+') as file:
[DO STUFF]
以上代码允许您迭代当前工作目录中的多个文件(指定类型)。
这有帮助吗?
我的想法与卢克相同(只是打字时间长了一点):
from openpyxl import load_workbook
from Test_Parameters import Results_Name
from Downstream import Log_Angle
import os
def good_name():
wb = load_workbook(filename=Results_Name + '.xlsm', read_only=False, keep_vba=True)
ws7 = wb['timeData']
for path in os.listdir('dir_path'):
# You can use glob here if you have other extensions than .txt
ws = load_sheet(path, ws7)
wb.save(Results_Name + '.xlsm')
def load_sheet(file_path, ws):
with open(file_path, 'r+') as FILE:
# This context manager is a cleaner way to open/close our file handle
line = FILE.readline()
N = '2'
while line !="":
print(line)
ws['A'+N] = line
line = FILE.readline()
N = float(N)
N = (N+1)
N = "%g" % N
return ws
不要使用 ws['A'+N]
进行编程访问。
我认为以下可能接近您想要的:
col_idx = ws.max_column + 1
for row_idx, line in enumerate(file, 1):
if line == "":
break
ws.cell(row=row_idx, col=col_idx, value=line)
wb.save(…)
- 此示例读取 test/txt 中的所有文件
- 为每个文件使用一个新列
- 文件名分配给第 1 行
追加所有阅读行,从第 2 行开始
# List all files in test/txt' dirName = os.path.join('test', 'txt') for column,fname in enumerate(os.listdir(dirName),1): # Column Title = Filename ws.cell(row=1, column=column, value=fname) # My Sample Text files are utf-8 encoded with io.open( os.path.join(dirName, fname),'r', encoding='utf8') as fh: # Column Data begins on Row 2 for row,line in enumerate(fh,2): ws.cell(row=row, column=column, value=line) #end with = closing fh #end for
测试 Python:3.4.2 - openpyxl:2.4.1 - LibreOffice:4.3.3.2*