将csv文件作为参数传递给函数

时间:2018-08-28 04:55:58

标签: python function file csv

  infile = open('abc.csv', "r")

  infile1 = open('xyz.csv', "r") 

  infile2 = open('pqr.csv', "r")

我正在尝试将3个csv文件读入in,in1,in2。之后,我必须将它们传递给函数。问题是当我尝试直接将in1,in2作为参数传递时,显示

  

ValueError:int()以10为底的无效文字:

convert_to(infile, infile1, infile2)

def convert_to(..,..,..)

如何将in1,in2作为函数定义的参数传入并调用?这是正确的方式,然后为什么它会显示此错误。还有其他更好,更有效的方法吗?

4 个答案:

答案 0 :(得分:1)

  import csv
  csv_files = ['abc.csv','xyz.csv','abcd.csv']  
  def convert_to(files):
      for file in files:
          with open(file,'r') as f:
              # Do something     

您可以将文件列表传递给函数,然后根据需要进行更改/隐藏它们。

答案 1 :(得分:1)

首先,您不能使用 in 作为变量名,因为它是python中的保留字:

import csv

file1 = open("abc.csv", "r")
file2 = open("xyz.csv", "r")
file3 = open("pqr.csv", "r")

def convert_to(a, b, c):
    ...

convert_to(file1, file2, file3)

此外,这不是我要这样做的方式,因为我想确保在使用文件后将其关闭。参见this。我将创建一个接受文件名作为参数的函数,然后处理该函数内部的文件:

import csv

filename1 = "abc.csv"
filename2 = "xyz.csv"
filename3 = "pqr.csv"

def convert_to(a, b, c):
    with open(a, "r") as file1:
        pass # do something with file abc.csv
    with open(b, "r") as file1:
        pass # do something with file xyz.csv
    with open(c, "r") as file1:
        pass # do something with file pqr.csv

convert_to(filename1, filename2, filename3)

答案 2 :(得分:0)

“ in”是关键字。您应该更改该变量名称。

不仅仅是变量名...您还需要更改参数。

我做到了,它对我来说很好。

import csv

in1 = open('abc.csv', "r")

in2 = open('xyz.csv', "r")

in3 = open('pqr.csv', "r")

def convert_to(in1, in2, in3):
    return 'hi'

print(convert_to(in1,in2,in3))

答案 3 :(得分:0)

仅是一个建议,为什么不使用pandas

pandas的情况下,将它们作为对象传递给函数并执行您想做的事情非常容易。

import pandas as pd
in1 = pd.read_csv('path/to/file1.csv')
in2 = pd.read_csv('path/to/file2.csv')
in3 = pd.read_csv('path/to/file3.csv')

def convert_to(*args):
    for df in args:
        print "hi"

convert_to(in1,in2,in3)

让我知道熊猫是否对您有用。

另一个解决方案:

您正在尝试convert_to中的

将任何值转换为integer。这可能是您的问题。将string转换为integer会引发您在顶部提到的错误。 这是一个例子:

print int('56.0000')
print float('56.0000')

您可以观察

ValueError: invalid literal for int() with base 10: '56.0000000'

对于第一种情况和第二种情况,

56.0

我认为这就是您遇到的问题。