【问题标题】:ValueError: Invalid file path or buffer object type: <class 'list'>ValueError:无效的文件路径或缓冲区对象类型:<class 'list'>
【发布时间】:2022-01-07 07:00:59
【问题描述】:

我是 python 新手,请在我的代码中提供帮助。我正在尝试将多个 excel 文件中的数据附加到一个文件中。但是出了点问题……

import pandas as pd
import argparse
import os

parser = argparse.ArgumentParser(description="extract data from machine")

parser.add_argument("-d","--data", dest="data", required =True, action = "store", type=argparse.FileType("r", encoding="latin-1"), nargs="+",
                     help="the excel file you want to analysis")
parser.add_argument("-o","--outFileNamePrefix",action="store",default="foo",dest="out",
                    help="the output file name")
args = parser.parse_args()

output = pd.DataFrame(columns=['Target','Sample','SQ Mean', 'SQ Std. Dev'])
output.to_excel("%s_%s.xlsx"%(args.out), index=False)
filenames = args.data
for filename in filenames:
    for line in filename:
        data = pd.read_excel(args.data)
        data = data.to_excel(os.path.join("%s_%s.xlsx"%(args.out)))

我有这个错误

ValueError: Invalid file path or buffer object type: <class 'list'>

任何建议都会有所帮助!

【问题讨论】:

  • 不要使用FileType 作为data 参数。它应该是一个简单的字符串,一个文件名,而不是一个打开的文件。
  • 为什么是这两个循环? for file in args.data: data=pd.read_excel(file) 在按照@hpaulj 的建议将该参数设为字符串之后会更有意义。
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: python pandas argparse


【解决方案1】:

args.data 似乎是 List,所以不妨试试args.data[0]

【讨论】:

    【解决方案2】:

    感谢大家的建议!现在可以了!!!

    这是使用命令行参数将多个带有一些数据的 Excel 文件合并到一个文件的最终工作代码。

    import pandas as pd
    import argparse
    
    # parse command line args
    parser = argparse.ArgumentParser(description="Extract data from machine")
    parser.add_argument("-d","--data", dest="data", action = "store", nargs="+",
                         help="the excel file you want to analysis")
    parser.add_argument("-o","--outFileNamePrefix",action="store",default="foo",dest="out",
                        help="the output file name")
    args = parser.parse_args()
    
    """input data"""
    df = pd.DataFrame()
    for file in args.data:
        data = pd.read_excel(file)
        df = df.append(data)
    data_final = df.to_excel("%s_%s.xlsx"%(args.out), index=False)
    

    首先我创建了args.datastring,正如@hpaulj 建议的那样,我删除了--data FileType,以便使其成为简单的字符串。然后,感谢@joanis,将for file in args.data:append 数据循环到空数据帧。

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 2021-04-14
      • 2020-05-28
      • 2021-08-06
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2019-03-29
      相关资源
      最近更新 更多