Не удается записать в файл более 204800 символов?
EDIT 2: Для тех из вас, кто хотел бы поближе познакомиться с кодом, вот он : https://github.com/pikzen/ffbookmark/blob/python-rewrite/ffbookmark.py
У меня тут небольшая проблема : python выдает IOError всякий раз, когда я пытаюсь записать в файл более 204800 символов. Я попробовал на другом компьютере, и он разбился на 768 тысячах символов. Является ли это проблемой python, ограничивает ли что-то ОС ? Вот код, который я использую:
with open('out.json', 'w') as f:
json.dump(items, f)
items
это просто словарь. Я строю его из HTML-файла, содержащего около 800 элементов. Каждый элемент строится следующим образом:
bookmark = {}
bookmark["title"] = link.contents[0]
bookmark["id"] = id
bookmark["parent"] = 5
bookmark["dateAdded"] = 1
bookmark["lastModified"] = 1
bookmark["type"] = "text/x-moz-place"
uri = link.get('href')
# Shaarli's self links are totally messed up : ?xGRpkrp
# But we can't simply oust links containing '?'s, because
# php uses it, and pretty much everything does
# however, if there's not dot, we can assume it's a
# Shaarli link.
# If it's not, well too bad, false positive.
if "?" in uri and not '.' in uri:
bookmark['uri'] = "about:blank"
else:
bookmark['uri'] = uri
id += 1
try:
# This line messes up when the end of the file has been reached
# Rather than coding properly, let's just catch the exception
desc = link.parent.next_sibling.next_sibling
if desc and desc.name == "dd":
bookmark["annos"] = []
annos = {}
annos["name"] = "bookmarkProperties/description"
annos["flags"] = 0
annos["expires"] = 4
annos["mimeType"] = ""
annos["type"] = 3
annos["value"] = desc.contents[0]
bookmark["annos"].append(annos)
Вывод:
IOError (Errno 27) : File too large
EDIT: дополнительная информация : Информация о Python:
$ python --version
Python 2.7.3
Используемые операционные системы:
Linux Mint 13: limit: 204.8 kB
Debian 6.0: limit: 768kB
1 ответ:
Это не ошибка Python, а ограничение файловой системы, в которую вы пишете, или эквивалентное (искусственное) ограничение вашей операционной системы.
Используйте
ulimit -f
для проверки ограничения размера файла. Он должен сказатьunlimited
. Если это не так, вы, скорее всего, захотите отредактировать/etc/security/limits.conf
. Для поиска проблемной конфигурации можно использовать следующую команду:grep fsize /etc/security/limits.conf /etc/security/limits.d/ -r
Вы также можете проверить свою файловую систему
quota
или пределы grsecurity.Наконец, вы можете захотеть проверить
mount
, чтобы убедиться, что файловая система, которую вы ожидаете монтировать, является той, которую вы видите.