Python将输出保存到一个txt文件中

2024-09-30 20:35:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试清理多个txt文件,并将结果保存为一个txt文件:

    import glob
    import errno
    import pandas as pd
    import numpy as np
    import os
    from io import BytesIO
    import sys

    path = 'path/.../*.txt'
    files = glob.glob(path)
    for fname in files:
    #print(fname)
    with open(fname) as f:
        data = pd.read_csv(fname,header=None,sep=' ')
        base = os.path.basename(fname)
        os.path.splitext(base)
        shortname = os.path.splitext(base)[0]
        data = data.drop([1,2,3,4], axis=1)
        data = data.drop_duplicates()
        #print(data)
        data=data.reset_index(drop=True)
        #print(data)
        data = data.T
        #print(data)
        data.insert(0, 'name', shortname, True)
        #print(data)
        data.columns = data.iloc[0]
        print(data)
        pass # do what you want
    with open('C:/Users/yl0340/Desktop/clean/clean15.txt','a+') as f:
    print(data, file = f)

当我运行它时,它会给我这样的输出(我没有全部显示):

    0  Shot9_010_559  19  4
    0  Shot9_011_157  19  4
    0  Shot9_011_157  19  4
    0  Shot9_012_235  19  4
    0  Shot9_012_235  19  4
    0  Shot9_013_288  19  4
    0  Shot9_013_288  19  4
    0  Shot9_014_79  19  4
    0  Shot9_014_79  19  4
    0  Shot9_015_335  19  4
    0  Shot9_015_335  19  4
    0  Shot9_016_268  0  19  4
    0  Shot9_016_268  0  19  4
    0  Shot9_017_399  16
    0  Shot9_017_399  16
    0  Shot9_018_189  2  19  18
    0  Shot9_018_189  2  19  18
    0  Shot9_019_399  19  2
    0  Shot9_019_399  19  2

我不知道为什么每行开头都有一个“0”。此外,当我打开输出文件(clean15.txt)时,它只显示输出的最后一行,如:

    0  Shot9_019_399  19  2

我不确定哪一部分我做得不对


Tags: 文件pathimporttxtdatabaseosas
3条回答

看看https://pandas.pydata.org/docs/reference/api/pandas.concat.html

您可以使用每个文件中的数据和短名称作为键创建dict。最后:

pd.concat(mydict.values(), mydict.keys(), names=['shortname']).to_csv()

  • 遍历这些文件
  • 清理数据帧
    • 没有更改任何数据清理步骤,因此答案假定data是一个完整的数据帧
  • data附加到数据帧列表中
  • 最后,使用^{}将数据帧列表合并到单个数据帧中
  • 使用^{}将数据帧写入文件
import glob
import pandas as pd


path = 'path/.../*.txt'
files = glob.glob(path)
df_list = list()
for fname in files:
    data = pd.read_csv(fname, header=None,sep=' ')
    data = data.drop([1,2,3,4], axis=1)
    data = data.drop_duplicates()
    #print(data)
    data=data.reset_index(drop=True)
    #print(data)
    data = data.T
    #print(data)
    data.insert(0, 'name', shortname, True)
    #print(data)
    data.columns = data.iloc[0]
    print(data)
    df_list.append(data)
    
df = pd.concat(df_list)
df.to_csv('C:/Users/yl0340/Desktop/clean/clean_files.txt', index=False)

Pandas通常会使用int为数据帧编制索引。我无法从您的输入中准确判断您希望哪些数据成为输出文件中的第一个值,但在将数据帧导出到文件之前,请尝试以下操作:

data.set_index('[the column you want as the index]')

相关问题 更多 >