【问题标题】:Loop over multiple files to merge according their names循环多个文件以根据其名称合并
【发布时间】:2018-03-27 14:04:22
【问题描述】:

我是一条新蟒蛇。我有 for 循环函数给了我一个包含 100 个文件的文件夹“里面的数据是数字并且 raws 的 nuber 是相同的”,如下所示:

A_0.20_1_.txt        for example   A_0.20_1_    B_0.20_1_      
B_0.20_1_.txt                         1            4
A_0.20_2_.txt                         2            5
B_0.20_2_.txt                         3            6

A_0.40_1_.txt
B_0.40_1_.txt
A_0.40_2_.txt
B_0.40_2_.txt

and so on.....

这些文件保存在名为 output 的文件夹中 我需要将输出文件夹中的两个文件合并为一个文件,例如:

merged_A_B_0.20_1_.txt       for example   merged_A_B_0.20_1_
merged_A_B_0.20_2_.txt                        1    4
                                              2    5
merged_A_B_0.40_1_.txt                        3    6
merged_A_B_0.40_2_.txt

and so on.....

我尝试使用以下代码:

filename_list = [f for f in os.listdir(r'C:\Users\output\')if os.path.isfile(f)] 
columns = []
for filename in filename_list:
    f=open(filename)
    x = np.array([float(raw) for raw in f.readlines()])
    columns.append(x)
columns = np.vstack(columns).T
np.savetxt('filename_out.txt', columns) 

但它不起作用并给我错误

     Traceback (most recent call last):

File "<ipython-input-6-5df3067f04e7>", line 1, in <module>
runfile('C:/Users/user/Downloads/combine 2 files new2.py', wdir='C:/Users/user/Downloads')

File "C:\ProgramData\Anaconda3\lib\site-
 packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)

File "C:\ProgramData\Anaconda3\lib\site-
  packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/user/Downloads/combine 2 files new2.py", line 22, in 
<module> columns = np.vstack(columns).T

File "C:\ProgramData\Anaconda3\lib\site-
packages\numpy\core\shape_base.py", line 230, in vstack
return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)

ValueError: need at least one array to concatenate    

请帮忙?

【问题讨论】:

  • "说“它不起作用”没有帮助。" 请参阅this 并改进您的问题。
  • 我写了错误信息,谢谢
  • 您需要两个列表,一个包含所有A_0.XXX.txt 文件,另一个包含B_0.XXX.txt。对它们进行排序,然后使用 zip(list1, list2) 合并这对。

标签: python python-3.x for-loop file-handling


【解决方案1】:

您的代码实际上正在运行,问题是您没有将完整路径传递给os.path.isfile(),因此它不会返回True,并且您的文件列表为空

import numpy as np
import os
file_path = r"C:\Users\output"
filename_list = []
for file in os.listdir(file_path):
    file = os.path.join(file_path, file)
    if os.path.isfile(file):
        filename_list.append(file)

columns = []
for filename in filename_list:
    with open(filename, 'r') as f:
        x = np.array([float(raw) for raw in f.readlines()])
        columns.append(x)
columns = np.vstack(columns).T
np.savetxt('filename_out.txt', columns)

这会将所有文件的数据写入一个文件,每个文件一列

【讨论】:

  • 感谢您的帮助,但我需要将每两个文件合并为一个文件。我有 100 个文件,我需要 50 个合并文件
猜你喜欢
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
相关资源
最近更新 更多