Открытый файл, считайте его, процесс, и запишите обратно - самый короткий метод в Python

Вы можете использовать побитовое значение AND :

SELECT *
FROM tab
WHERE answer & 10 = 10

Аналогичный подход, используемый в @@ OPTIONS :

[ 118] Функция @@ OPTIONS возвращает битовый массив опций, преобразованный в целое число 10 (десятичное).

Чтобы декодировать значение @@ OPTIONS , преобразуйте целое число, возвращаемое @@ OPTIONS , в двоичный файл, а затем найдите значения в таблице в разделе Настройка параметров пользователя Настройка сервера Вариант. Например, если SELECT @@ OPTIONS; возвращает значение 5496, используйте калькулятор программиста Windows (calc.exe) для преобразования десятичного числа 5496 в двоичное. Результат - 1010101111000. Самые правые символы (двоичные 1, 2 и 4) равны 0, что указывает на то, что первые три элемента в таблице выключены.

blockquote>

Проверка ANSI_NULLS

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

blockquote> [111 ]

13
задан Eli Bendersky 24 October 2008 в 06:19
поделиться

6 ответов

На самом деле более легкий способ использовать fileinput состоит в том, чтобы использовать оперативный параметр:

import fileinput
for line in fileinput.input (filenameToProcess, inplace=1):
    process (line)

При использовании оперативного параметра, он перенаправит stdout в файл, так, чтобы, если Вы делаете печать, она записала обратно в Ваш файл.

Этот пример добавляет номера строки к Вашему файлу:

import fileinput

for line in fileinput.input ("b.txt",inplace=1):
    print "%d: %s" % (fileinput.lineno(),line),
26
ответ дан 1 December 2019 в 19:23
поделиться

Я пошел бы для элегантности другим путем: реализуйте свои операции чтения файла и фильтрации как генераторы, Вы запишете больше строк кода, но это будет более гибкий, удобный в сопровождении, и производительный код.

Посмотрите Приемы Генератора David M. Beazley для Системных Программистов, который является действительно важной вещью для любого, кто пишет этот вид кода для чтения.

4
ответ дан 1 December 2019 в 19:23
поделиться

Это, кажется, работает:

with open(filename, "r+") as f:
    new_txt = process(f.read())
    f.truncate(0)
    f.write(new_txt)
3
ответ дан 1 December 2019 в 19:23
поделиться

Чтобы сделать это способом, который не съест Ваши данные, если Вы откажете в середине:

from twisted.python.filepath import FilePath
p = FilePath(filename)
p.setContent(process(p.getContent()))
1
ответ дан 1 December 2019 в 19:23
поделиться

При поиске Python, эквивалентного из "жемчуга - пи", вот довольно хороший:

import fileinput
for line in fileinput.input():
   # process line

См. http://www.python.org/doc/2.5.2/lib/module-fileinput.html для больше.

Сделанный этот путь, Вы использовали бы свой сценарий Python в канале для создания нового файла:

$ myscript.py infile.txt > outfile.txt
2
ответ дан 1 December 2019 в 19:23
поделиться

Мое ужасное (но короткий, как указано в вопросе) решение с выражениями генератора;

# Some setup first
file('test.txt', 'w').write('\n'.join('%05d' % i for i in range(100)))


# This is the filter function
def f(i):
    return i % 3


# This is the main part 
file('test2.txt', 'w').write('\n'.join(str(f(int(l))) for l in file('test.txt', 'r').readlines()))


# And a wrapper for sanity
def filter_file(infile, outfile, filter_function)
    outfile.write('\n'.join(filter_function(l) for l in infile.readlines()))
0
ответ дан 1 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

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