получить содержимое указанной c строки из файла в python - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь получить содержимое строки из файла, т.е.

представьте, что файл выглядит следующим образом:

line1
line2
line3

, а затем произнесите функцию, которая читает специфику c строка lineget

unLine = lineget(2) 
print(unLine)

, а затем я хотел бы, чтобы результат был примерно таким:

>>> line2

Ответы [ 4 ]

0 голосов
/ 13 июля 2020

Для работы с файлами существует концепция контекстных магеров, на которую полезно взглянуть. Причина в том, что мы должны не забывать открывать / закрывать файлы, как показано ниже:

fname = "myfile.txt" # Name of file 

# 1. Opening, reading and closing file
FILE = open(fname)
for line in FILE:
    print(line)
FILE.close()

# 2. Use the 'with' context manager to manage opening/closing
with open(fname) as FILE:
    for line in FILE:
        print(line)

Теперь, когда мы хотим прочитать данные, мы должны явно добавить их в переменную

fname = "myfile.txt" # Name of file 

# 1. Read data, simple
with open(fname) as FILE:
    data = []
    for line in FILE:
            data.append(line)

# 2. Read data directly into the variable
with open(fname) as FILE:
    data = list(FILE)

Возможно мы хотим убрать «новые строки» в конце, это мы можем сделать, «убрав» символ '\n':

fname = "myfile.txt" # Name of file 

# 1. Read data and strip 'newlines', simple
with open(fname) as FILE:
    data = []
    for line in FILE:
        data.append( line.rstrip() )

# 2. Read data and strip newlines using `map` function
with open(fname) as FILE:
    data = map(str.rstrip, FILE)

Наконец, мы хотим получить несколько специфических c строк. Это можно сделать с помощью простого оператора if:

fname = "myfile.txt" # Name of file 
readLines = [0, 2, 4] # Lines to be read from file, zero indexed

# 1. Read data from specific lines and strip 'newlines', simple
with open(fname) as FILE:
    data = []
    for line in FILE:
        if idx in readLines:
            data.append( line.rstrip() )

# 2. Read data from specific lines and strip newlines using 'list comprehension'
with open(fname) as FILE:
    data = [ line.rstrip() for idx, line in enumerate(FILE) if idx in readLines ]
0 голосов
/ 13 июля 2020

Один из вариантов:

def lineget(file, line):
    with open(file, 'r') as f:
        lines = file.readlines()
    
    return lines[line-1]

Изменить: Как упоминал @Olvin Roght (спасибо за отзыв), для файлов с большим количеством строк неэффективно прочтите каждую строку в файле, особенно если интересующая вас строка находится ближе к началу. Вместо этого можно использовать следующее:

def lineget(file, line_num):
    f = open(file)
    
    for i, line in enumerate(f):
        if i == (line_num - 1):
            f.close()
            return line

Надеюсь, это поможет!

0 голосов
/ 13 июля 2020

Примерно так должно работать:

def lineget(filename,linenumber):
    f = open(filename,"r")
    all_lines = f.readlines()
    f.close()
    return all_lines[linenumber-1]
0 голосов
/ 13 июля 2020

Есть модуль linecache, который вы можете использовать:

import linecache

line_num = 2
line = linecache.getline("file.txt", line_num)
print(line)
# other operations
linecache.clearcache()  # after you finished work with file(-s)

Также можно применить генератор с распаковкой:

line_num = 2
with open("file.txt") as f:
    *_, line = (f.readline() for _ in range(line_num))
print(line)

Также можно использовать для л oop:

line_num = 2
with open("file.txt") as f:
    for i, line in enumerate(f):
        if i == line_num - 1:
            break
    else:
        line = ""
print(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...