невозможно распечатать содержимое текстового файла [дубликат]

Вы можете использовать json_decode () для преобразования строки json в объект / массив PHP.

Например.

Вход:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

Выход:

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

Несколько точек для запоминания:

  • json_decode требует, чтобы строка была действительной json, иначе она вернется NULL.
  • В случае отказа декодирования json_last_error() можно использовать для определения точного характера ошибки.
  • Сделать убедитесь, что вы перешли в utf8 контент, или json_decode может выйти из строя и просто вернуть значение NULL.

123
задан holys 25 April 2013 в 07:51
поделиться

6 ответов

Допустим, вы открываете файл с помощью оператора with, как и должно быть. Затем вы сделаете что-то подобное для чтения из вашего файла:

with open('somefile.txt', 'w+') as f:
    # Note that f has now been truncated to 0 bytes, so you'll only
    # be able to read data that you wrote earlier...
    f.write('somedata\n')
    f.seek(0)  # Important: return to the top of the file before reading, otherwise you'll just read an empty string
    data = f.read() # Returns 'somedata\n'

Обратите внимание на f.seek(0) - если вы забудете об этом, вызов f.read() попытается прочитать с конца файл и вернет пустую строку.

76
ответ дан rmunn 21 August 2018 в 18:39
поделиться
  • 1
    что «усекает до 0 байтов», имею в виду? – Nasif Imtiaz Ohi 6 January 2018 в 00:49
  • 2
    @NasifImtiazOhi - Документы Python говорят, что w+ будет «перезаписывать существующий файл, если файл существует». Итак, как только вы откроете файл с w+, теперь это пустой файл: он содержит 0 байт. Если он использовался для хранения данных, эти данные были усечены - обрезаны и выброшены - и теперь размер файла равен 0 байтам, поэтому вы не можете прочитать какие-либо данные, которые существовали до , которые вы открыли файл с w+. Если вы действительно хотели прочитать предыдущие данные и добавить к ним, вы должны использовать r+ вместо w+. – rmunn 6 January 2018 в 09:33
  • 3
    как добавить новые данные сверху? – Beqa Bukhradze 1 July 2018 в 17:34
  • 4
    @BeqaBukhradze - Если у вас есть вопрос, нажмите «Задать вопрос». , где его будут видеть сотни людей. Не просто нажмите «Добавить комментарий» и «Добавить комментарий». , где его видят только один или два человека. – rmunn 2 July 2018 в 01:05

Все режимы файла в Python

  • r для чтения
  • r+ открывается для чтения и записи (невозможно обрезать файл)
  • w для записи
  • w+ для записи и чтения (может обрезать файл)
  • rb для чтения двоичного файла. Указатель файла помещается в начало файла.
  • rb+ чтение или запись двоичного файла
  • wb+ запись двоичного файла
  • a+ открывается для добавления
  • ab+ Открывает файл для добавления и чтения в двоичном формате. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления.
  • x открыт для исключительного создания, если файл уже существует (Python 3)
117
ответ дан Alok Agarwal 21 August 2018 в 18:39
поделиться
  • 1
    Это не все режимы. Он пренебрегает, например, rb и wb, не говоря уже о режимах U в режимах 2.x и t в 3.x (которые могут быть объединены со всем, кроме b). – abarnert 4 August 2014 в 10:30
  • 2
    Разница между r + и w + заключается в том, что w + обрезает файл при его открытии. Но вы можете обрезать его вручную в обоих режимах. – Martin 7 October 2014 в 09:14
  • 3
    Этот ответ непостоянен с тем, который задан @ 200 OK, например, wb+ также читается из файла? – Celeritas 17 July 2015 в 19:53
  • 4
    @Celeritas Wb указывает, что файл открыт для записи в двоичном режиме. В системах Unix (Linux, Mac OS X и т. Д.) Двоичный режим ничего не делает - они обрабатывают текстовые файлы так же, как обрабатываются любые другие файлы. Однако в Windows текстовые файлы записываются со слегка измененными окончаниями строк. Это вызывает серьезную проблему при работе с фактическими двоичными файлами, такими как exe или jpg-файлы. Поэтому при открытии файлов, которые не должны быть текстовыми, даже в Unix, вы должны использовать wb или rb. Используйте plain w или r только для текстовых файлов. – Alok Agarwal 12 August 2015 в 09:06
  • 5
    В Python 3 существует также открытый режим «x»: открытый для исключительного создания, если он не существует. См. Функцию open в документе. – Laurent LAPORTE 20 October 2016 в 11:49

Я подозреваю, что есть два способа справиться с тем, что, как я думаю, вы пытаетесь достичь.

1), что очевидно, открывает файл только для чтения, читает его в памяти и открывает файл с помощью t, затем запишите свои изменения.

2) используйте подпрограммы обработки файлов низкого уровня:

# Open file in RW , create if it doesn't exist. *Don't* pass O_TRUNC
 fd = os.open(filename, os.O_RDWR | os.O_CREAT)

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

1
ответ дан Dory Zidon 21 August 2018 в 18:39
поделиться

Файл усечен, поэтому вы можете вызывать read() (никаких исключений не было, в отличие от того, что было открыто с помощью «w»), но вы получите пустую строку.

2
ответ дан Elazar 21 August 2018 в 18:39
поделиться

На самом деле, что-то не так во всех остальных ответах в режиме r+.

test.in содержимое файла:

hello1
ok2
byebye3

И сценарий py:

with open("test.in", 'r+')as f:
    f.readline()
    f.write("addition")

Выполните его, и содержимое test.in будет изменено на:

hello1
ok2
byebye3
addition

Однако, когда мы модифицируем скрипт на:

with open("test.in", 'r+')as f:
    f.write("addition")

test.in также реагируют:

additionk2
byebye3

Таким образом, режим r+ позволит нам покрывать контент с самого начала, если мы не выполнили операцию чтения. И если мы выполним некоторую операцию чтения, f.write() просто добавит файл.

Кстати, если мы f.seek(0,0) до f.write(write_content), write_content будет покрывать их из positon (0, 0).

0
ответ дан Find 21 August 2018 в 18:39
поделиться

Ниже приведен список различных способов открытия файла:

  • r

    Открывает файл только для чтения. Указатель файла помещается в начале файла. Это режим "по умолчанию".
  • rb

    Открывает файл для чтения только в двоичном формате. Указатель файла помещается в начале файла. Это режим "по умолчанию".
  • r +

    Открывает файл для чтения и записи. Указатель файла будет в начале файла.
  • rb +

    Открывает файл для чтения и записи в двоичном формате. Указатель файла будет в начале файла.
  • w

    Открывает файл только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создается новый файл для записи.
  • wb

    Открывает файл для записи только в двоичном формате. Перезаписывает файл, если файл существует. Если файл не существует, создается новый файл для записи.
  • w +

    Открывает файл для записи и чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создается новый файл для чтения и записи.
  • wb +

    Открывает файл для записи и чтения в двоичном формате. Перезаписывает существующий файл, если файл существует. Если файл не существует, создается новый файл для чтения и записи.
  • a

    Открывает файл для добавления. Указатель файла находится в конце файла, если файл существует. То есть, файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.
  • ab

    Открывает файл для добавления в двоичном формате. Указатель файла находится в конце файла, если файл существует. То есть, файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.
  • a +

    Открывает файл для добавления и чтения. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.
  • ab +

    Открывает файл для добавления и чтения в двоичном формате. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.
264
ответ дан Nullify 21 August 2018 в 18:39
поделиться
  • 1
    так что для всех интенсивных целей r + и w + одинаковы? – Nick Humrich 17 July 2014 в 23:59
  • 2
    @Humdinger: Нет, w+ создает новый файл или обрезает существующий файл, затем открывает его для чтения и записи; r+ открывает существующий файл без усечения его для чтения и записи. Очень разные. – abarnert 4 August 2014 в 10:31
  • 3
  • 4
    Было бы глупо давать исчерпывающий список режимов, так как они функционируют скорее как функция с несколькими параметрами. r, w или a являются исключительными, но b могут быть добавлены к любому из них, также как + или U ... Это комбинаторный взрыв. – rmunn 3 October 2014 в 07:41
  • 5
    rb не является режимом по умолчанию, цитата: The most commonly-used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists), and 'a' for appending (which on some Unix systems means that all writes append to the end of the file regardless of the current seek position). If mode is omitted, it defaults to 'r' docs.python.org/2/library/functions.html#open – iggy 27 July 2015 в 11:33
Другие вопросы по тегам:

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