удалить пустые места файлов Python - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть файл с несколькими строками, и некоторые из них имеют пустые пробелы.

x=20
y=3
z = 1.5
v = 0.1

Я хочу удалить эти пробелы и получить каждую строку в словаре, где элемент перед '='знак будет ключом, а элемент после знака '=' будет его значением.

Однако мой код не работает, по крайней мере часть "удалить пустые места".Вот код:

def copyFile(filename):
    """
    function's contract
    """
    with open(filename, 'r') as inFile:
        for line in inFile:
            cleanedLine = line.strip()
            if cleanedLine:
                firstPart, secondPart = line.split('=')  
                dic[firstPart] = float(secondPart)
        inFile.close()
    return dic

После очистки пустых мест мой файл должен выглядеть примерно так

x=20
y=3
z=1.5
v=0.1

Но он не работает.Что я делаю не так?

Ответы [ 4 ]

0 голосов
/ 17 декабря 2018

У вас есть две проблемы:

  1. Причина, по которой вы не удаляете пробел, заключается в том, что вы звоните .strip() по всей строке.strip() удаляет пробелы в начале и конце строки, а не в середине.Вместо этого вызывается .strip() в firstpart и lastpart.

  2. . Это исправит созданный вами словарь в памяти, но не внесет никаких изменений вфайл, так как вы никогда не пишете в файл.Вам нужно будет создать вторую копию файла, в который вы записываете свои strip() ed значения, а затем, в конце, заменить исходный файл новым файлом.

0 голосов
/ 17 декабря 2018

Вам нужно strip после разбиения строки.Это предполагает, что единственные нежелательные пробелы находятся вокруг = или до, или после содержимого строки.

from ast import literal_eval

def copyFile(filename):
    with open(filename, 'r') as inFile:
        split_lines = (line.split('=', 1) for line in inFile)
        d = {key.strip(): literal_eval(value.strip()) for key, value in split_lines}
    return d
0 голосов
/ 17 декабря 2018

Есть несколько проблем с вашим кодом.

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

Secondвам не нужно inFile.close(), потому что вы открываете его в with, который всегда будет закрывать его вне блока.

В-третьих, ваши функции и имена переменных не соответствуют стандарту PEP8.

В-четвертых, вам нужно strip каждую часть.

Вот код, который работает и выглядит красиво:

def copy_file(filename):
    """
    function's contract
    """
    dic = {}
    with open(filename, 'r') as in_file:
        for line in in_file:
            cleaned_line = line.strip()
            if cleaned_line:
                first_part, second_part = line.split('=')
                dic[first_part.strip()] = float(second_part.strip())
    return dic
0 голосов
/ 17 декабря 2018

для удаления пробела попробуйте .replace ("", "") вместо .strip ()

...