Как написать функцию в Python с именем файла в качестве аргумента? [закрыто]

Так как вы хотите, по сути, просто, разумная вещь - просто вернуть все свои изменения вместо использования третьих сторон, которые могут быть слишком сложными. Просто скопируйте файл /usr/share/doc/apt/examples/sources.list в /etc/apt/ и удалите файлы в каталоге /etc/apt/sources.list.d. Или в простых командах:

sudo mv /etc/apt/sources.list{,.bk}
sudo mv /etc/apt/sources.list.d{,.bk}
sudo mkdir /etc/apt/sources.list.d
sudo cp /usr/share/doc/apt/examples/sources.list /etc/apt/sources.list
sudo apt-get update

Это восстановит исходный файл sources.list без осложнений.

1
задан 24 September 2017 в 01:07

3 ответа

Попробуйте:

import numpy

def loadfile(filename, i):
   return numpy.loadtxt(filename, usecols=(i,))

В качестве примера рассмотрим этот файл:

$ cat nums.txt
1 2 3
4 5 6
7 8 9

Затем наблюдаем loadfile, успешно прочитанные в столбце:

[ f3]

Примечания

Строка def определения функции должна заканчиваться на :. Аргументы функции должны быть переменными, такими как filename, а не фиксированными строками типа 'filename.py'. Это будет работать, но не делает то, что вы хотите:
def loadfile(x, i):
    f = numpy.loadtxt('x', i)
    return(f)
Вышеприведенное значение принимает x в качестве аргумента, но затем игнорирует его и пытается загрузить имя файла, имя которого является единственным символом x. Это также не сработает:
def loadfile(filename.py, i):
    f = numpy.loadtxt('filename.py', usecols=(i))
    return(f)
filename.py не является допустимым именем для простой переменной. Даже если бы это было так, код не пытался использовать это имя переменной. Вместо этого он пытается загрузить файл, имя которого является строкой символов filename.py.
0
ответ дан 22 May 2018 в 18:11
  • 1
    @PattyB При тестировании моего кода, пожалуйста, не перепечатывайте его. Скопируйте и вставьте его точно так, как есть. – John1024 23 September 2017 в 23:17
  • 2
    Я могу создать функцию просто отлично, но затем, когда я пытаюсь вызвать ее с именем файла, я получаю TypeError: объект «int» не является итерируемым. Это потому, что я вызываю файл .py, а не .txt? Также вы сказали, что это должна быть переменная типа filename, но затем при вызове функции вы используете фиксированную строку nums.txt, не могли бы вы объяснить, почему это разрешено? Спасибо за помощь! – Patty B 23 September 2017 в 23:23
  • 3
    (1) Для TypeError, пожалуйста, укажите точное сообщение об ошибке. (2) Внутри функции нам нужно использовать имя переменной. При вызове функции мы можем использовать либо переменную, либо строку. Если мы используем переменную, ей должно быть присвоено ранее значение, соответствующее имени файла. – John1024 23 September 2017 в 23:32
  • 4
    @PattyB Я предполагаю, что вы получаете этот TypeError, потому что вы сделали опечатку: usecols=i вместо usecols=(i). – wjandrea 24 September 2017 в 00:08
  • 5
    @PattyB Еще одна возможность для TypeError заключается в том, что вы используете старый python2 вместо текущего python3. Я обновил ответ с кодом, который будет работать на обоих. – John1024 24 September 2017 в 00:13

Попробуйте:

import numpy def loadfile(filename, i): return numpy.loadtxt(filename, usecols=(i,))

В качестве примера рассмотрим этот файл:

$ cat nums.txt 1 2 3 4 5 6 7 8 9

Затем наблюдаем loadfile, успешно прочитанные в столбце:

>>> loadfile('nums.txt', 2) array([ 3., 6., 9.])

Примечания

Строка def определения функции должна заканчиваться на :. Аргументы функции должны быть переменными, такими как filename, а не фиксированными строками типа 'filename.py'. Это будет работать, но не делает то, что вы хотите: def loadfile(x, i): f = numpy.loadtxt('x', i) return(f) Вышеприведенное значение принимает x в качестве аргумента, но затем игнорирует его и пытается загрузить имя файла, имя которого является единственным символом x. Это также не сработает: def loadfile(filename.py, i): f = numpy.loadtxt('filename.py', usecols=(i)) return(f) filename.py не является допустимым именем для простой переменной. Даже если бы это было так, код не пытался использовать это имя переменной. Вместо этого он пытается загрузить файл, имя которого является строкой символов filename.py.
0
ответ дан 18 July 2018 в 06:20

Попробуйте:

import numpy def loadfile(filename, i): return numpy.loadtxt(filename, usecols=(i,))

В качестве примера рассмотрим этот файл:

$ cat nums.txt 1 2 3 4 5 6 7 8 9

Затем наблюдаем loadfile, успешно прочитанные в столбце:

>>> loadfile('nums.txt', 2) array([ 3., 6., 9.])

Примечания

Строка def определения функции должна заканчиваться на :. Аргументы функции должны быть переменными, такими как filename, а не фиксированными строками типа 'filename.py'. Это будет работать, но не делает то, что вы хотите: def loadfile(x, i): f = numpy.loadtxt('x', i) return(f) Вышеприведенное значение принимает x в качестве аргумента, но затем игнорирует его и пытается загрузить имя файла, имя которого является единственным символом x. Это также не сработает: def loadfile(filename.py, i): f = numpy.loadtxt('filename.py', usecols=(i)) return(f) filename.py не является допустимым именем для простой переменной. Даже если бы это было так, код не пытался использовать это имя переменной. Вместо этого он пытается загрузить файл, имя которого является строкой символов filename.py.
0
ответ дан 24 July 2018 в 18:35

Другие вопросы по тегам:

Похожие вопросы: