Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从具有相同名称结构的文本文件中读取数据,并将所有数据附加到新文件中_Python_C_Matlab_Loops_Append - Fatal编程技术网

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=',')

使用pythonzipcsv模块来实现这一点。在单个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())