Python 从具有相同名称结构的文本文件中读取数据,并将所有数据附加到新文件中
我有一些数据文件,比如说Python 从具有相同名称结构的文本文件中读取数据,并将所有数据附加到新文件中,python,c,matlab,loops,append,Python,C,Matlab,Loops,Append,我有一些数据文件,比如说data1.txt,data2.txt,。。。等等我想使用单个循环结构读取所有这些数据文件,并将数据值附加到单个文件中,比如data-all.txt 我对以下任何编程语言都很在行:c,python,matlabpathlib模块非常适合全局匹配文件,并且易于读/写: from pathlib import Path def all_files(dir, mask): for path in Path(dir).glob(mask): yield
data1.txt
,data2.txt
,。。。等等我想使用单个循环结构读取所有这些数据文件,并将数据值附加到单个文件中,比如data-all.txt
我对以下任何编程语言都很在行:
c
,python
,matlab
pathlib
模块非常适合全局匹配文件,并且易于读/写:
from pathlib import Path
def all_files(dir, mask):
for path in Path(dir).glob(mask):
yield from path.open()
Path('data_all.txt').write_text(''.join(all_files('.', 'data*.txt')))
在python中,首先必须创建可以使用python中glob库的所有文件路径的列表
import glob
import pandas as pd
path_list = glob.glob('Path/To/Your/DataFolder/pattern(data*)')
然后,您可以使用列表理解读取该数据。它将根据文件夹中的数据文件提供数据帧列表
list_data = [pd.read_csv(x,sep='\t') for x in path_list]
它将在单个数据帧中组合数据,您可以将其作为单个数据帧写入
data_all = pd.concat(list_data,ignore_index=True)
现在,您可以在单个文件中写入数据帧
data_all.to_csv('Path',sep=',')
使用pythonzip和csv模块来实现这一点。在单个for循环中: 例如:
import csv
with open("data_all.csv", "w") as f:
csv_writer = csv.writer(f)
for d1, d2, d3 in zip(open("data1.txt", "r"), open("data2.txt", "r"), open("data3.txt", "r")):
csv_writer.writerow([d1, d2, d3])
可以通过读取每个文件的内容并将其写入输出文件句柄来完成。说明中的文件结构包含数字,因此我们可能需要调用sorted对其进行排序,然后再开始阅读。“文件搜索模式”应指向输入目录“PATH/*.txt”,输出文件句柄“data all.txt”也应指向该目录 在windows中,使用 复制数据*.txt data-all.txt
import glob
files_search_pattern = "*.txt"
files = sorted(glob.glob(files_search_pattern))
with open("data-all.txt", "wb") as output:
for f in files:
with open(f, "rb") as inputFile:
output.write(inputFile.read())
在Unix中,使用
cat data*.txt>>data all.txt您有任何代码原型吗?提供您的文件的更多详细信息。这些文件的结构是什么?它们是用制表符还是逗号分隔的?如果是这种情况,我建议您阅读csv模块()。@Felipe所有数据文件都是
.txt
格式。有M行和3列,只有数值,没有文本(甚至没有标题)。数值是以制表符分隔的。名称与全局通配符字符串匹配的文件。天哪,多棒的模块啊!谢谢你的提示!!这个性感的“/”操作符重载怎么样<代码>目录路径=路径('/tmp/some/dir');文件_in_dir=dir_path/'data1.txt',递归glob也有rglob
。运行此代码时,我遇到以下错误:SyntaxError:第5行的无效语法,即yield from path.open()
yield from
是相当新的,我认为Python 3.5。对于路径中的行,将其替换为。open():屈服线
import glob
files_search_pattern = "*.txt"
files = sorted(glob.glob(files_search_pattern))
with open("data-all.txt", "wb") as output:
for f in files:
with open(f, "rb") as inputFile:
output.write(inputFile.read())