Чтение строк из текстового файла в Python (Windows) - PullRequest
3 голосов
/ 03 июня 2011

Я работаю над простой процедурой импорта, которая переводит текстовый файл в формат json для нашей системы на python.

import json

# Open text file for reading
txtFile = open('Boating.Make.txt', 'r')

# Create picklist obj
picklistObj = dict()
picklistObj['name'] = 'Boating.Make'
picklistObj['items'] = list()

i = 0
# Iterate through each make in text file
for line in txtFile:
    picklistItemObj = dict()
    picklistItemObj['value'] = str(i)
    picklistItemObj['text'] = line.strip()
    picklistItemObj['selectable'] = True
    picklistObj['items'].append(picklistItemObj)
    i = i + 1
txtFile.close()

picklistJson = json.dumps(picklistObj, indent=4)
print picklistJson

picklistFile = open('Boating.Make.json', 'w')
picklistFile.write(picklistJson)
picklistFile.close()

Мой вопрос: зачем мне нужна "полоска"?Я подумал, что python должен магически знать константу новой строки для любой среды, в которой я сейчас нахожусь. Я что-то упустил?

Я должен уточнить, что текстовый файл, из которого я читаю, является файлом ASCII, который содержит строкиразделенный текстом '\ r \ n'.

Ответы [ 4 ]

3 голосов
/ 03 июня 2011

Python сохраняет символы новой строки при перечислении строк.Например, при перечислении текстового файла, такого как

foo
bar

, вы получаете две строки: "foo\n" и "bar\n".Если вам не нужны символы новой строки терминала, вы звоните strip().

Кстати, я не фанат этого поведения.

1 голос
/ 03 июня 2011

См. это .

Python обычно создается с универсальной поддержкой новой строки;при вводе 'U' файл открывается как текстовый файл, но строки могут заканчиваться любым из следующих условий: соглашение о конце строки Unix '\ n', соглашение Macintosh '\ r' или соглашение Windows 'r \ n '

0 голосов
/ 03 июня 2011

Попробуйте следующее в интерпретаторе Python, чтобы увидеть, что делает язык:

open('test1.txt', 'wb').write(b'Hello\nWorld!')
open('test2.txt', 'wb').write(b'Hello\r\nWorld!')
print(list(open('test1.txt'))) # Shows ['Hello\n', 'World!']
print(list(open('test2.txt'))) # Shows ['Hello\n', 'World!']

Python распознает правильные переводы строки.Вместо использования strip в ваших строках вы можете написать myString.replace('\n', '').Проверьте документацию:

>>> help(str.strip)
Help on method_descriptor:

strip(...)
    S.strip([chars]) -> str

    Return a copy of the string S with leading and trailing
    whitespace removed.
    If chars is given and not None, remove characters in chars instead.

>>> help(str.replace)
Help on method_descriptor:

replace(...)
    S.replace(old, new[, count]) -> str

    Return a copy of S with all occurrences of substring
    old replaced by new.  If the optional argument count is
    given, only the first count occurrences are replaced.
0 голосов
/ 03 июня 2011

Вам нужна функция strip (), потому что «for line in file:» сохраняет разделители строк в строках.Это явно не указано в документации (по крайней мере, в документе 2.71, который я смотрю).Но он работает аналогично file.readline (), в котором явно указано, что он сохраняет символ новой строки.

...