Как я могу обнаружить разрывы строки DOS в файле?

Здесь вы можете обнаружить полное имя типа исключения, результат здесь дает System.Management.Automation.ArgumentTransformationMetadataException, как указано @Adrian Wright.

Clear-Host
try {
    [xml]$xml = Get-Content "c:\Temp\1.cs" # line 2
}
catch {
    # Discovering the full type name of an exception
    Write-Host $_.Exception.gettype().fullName
    Write-Host $_.Exception.message
}
13
задан Eric O Lebigot 12 November 2011 в 00:00
поделиться

6 ответов

Вы можете искать в строке \ r \ n . Это конец строки в стиле DOS.

РЕДАКТИРОВАТЬ: Взгляните на это

9
ответ дан 1 December 2019 в 18:04
поделиться

Как полный новичок в Python и просто для развлечения, я попытался найти какой-то минималистичный способ проверки этого для одного файла. Кажется, это работает:

if "\r\n" in open("/path/file.txt","rb").read():
    print "DOS line endings found"

Edit: упрощено в соответствии с комментарием Джона Мачина (нет необходимости использовать регулярные выражения).

2
ответ дан 1 December 2019 в 18:04
поделиться

Python может автоматически определять, какая конвенция новой строки используется в файле, благодаря "универсальному режиму новой строки" (U), и вы можете получить доступ к догадке Python через newlines атрибут файловых объектов:

f = open('myfile.txt', 'U')
f.readline()  # Reads a line
# The following now contains the newline ending of the first line:
# It can be "\r\n" (Windows), "\n" (Unix), "\r" (Mac OS pre-OS X).
# If no newline is found, it contains None.
print repr(f.newlines)

Это дает окончание новой строки первой строки (Unix, DOS, и т.д.). ), если таковое имеется.

Как отметил Джон М., если у вас случайно есть патологический файл, в котором используется более одной кодировки новой строки, f.newlines - это кортеж со всеми кодировками новой строки, найденными на данный момент, после чтения многих строк.

Ссылка: http://docs.python.org/2/library/functions.html#open

Если вы просто хотите преобразовать файл, вы можете просто сделать:

with open('myfile.txt', 'U') as infile:
    text = infile.read()  # Automatic ("Universal read") conversion of newlines to "\n"
with open('myfile.txt', 'w') as outfile:
    outfile.write(text)  # Writes newlines for the platform running the program
29
ответ дан 1 December 2019 в 18:04
поделиться

(только Python 2 :) Если вы просто хотите читать текстовые файлы в формате DOS или Unix, это работает:

print open('myfile.txt', 'U').read()

То есть "универсальный" читатель файлов Python будет автоматически использовать все разные маркеры конца строки, переводя их в "\ n".

http://docs.python.org/library/functions.html#open

(Спасибо, ручка!)

3
ответ дан 1 December 2019 в 18:04
поделиться

Использование grep и bash:

grep -c -m 1 $'\r$' file

echo $'\r\n\r\n' | grep -c $'\r$'     # test

echo $'\r\n\r\n' | grep -c -m 1 $'\r$'  
0
ответ дан 1 December 2019 в 18:04
поделиться

разрывы строк в dos: \ r \ n , только unix \ n . Так что просто ищите \ r \ n .

0
ответ дан 1 December 2019 в 18:04
поделиться
Другие вопросы по тегам:

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