Передача CSV-файлов в качестве аргументов в функцию - PullRequest
0 голосов
/ 28 августа 2018
  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 голосов
/ 28 августа 2018

Просто предложение, почему бы вам не использовать 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

Я думаю, что это проблема, с которой вы столкнулись.

0 голосов
/ 28 августа 2018
  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     

Вы можете передать список файлов функции, а затем внести изменения / скрыть их по своему желанию.

0 голосов
/ 28 августа 2018

Во-первых, вы не можете использовать в в качестве имени переменной, поскольку это зарезервированное слово в 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)

Кроме того, я бы так не поступил, поскольку хотел бы убедиться, что файл закрыт после его использования. Смотрите это . Я хотел бы создать функцию, которая принимает имена файлов в качестве аргументов, а затем обрабатывать файлы внутри функции:

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)
0 голосов
/ 28 августа 2018

"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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...