python - Python:tbird2claws.py 问题
问题描述
我正在尝试将我的存档消息 + 文件夹结构从 Thunderbird 迁移到 Claws。开发人员(和其他人)建议尝试 Python 脚本tbird2claws.py(“将 Mozilla Thunderbird 邮箱集成到 Claws Mail”)。
但是,我收到以下错误消息:
root@debian:~/.thunderbird/f6tkjcoh.default# python $HOME/Downloads/claws-mail-tbird2claws/tbird2claws.py . ~/Mail
Traceback (most recent call last):
File "/root/Downloads/claws-mail-tbird2claws/tbird2claws.py", line 130, in <module>
convert_tree(sys.argv[1], sys.argv[2])
File "/root/Downloads/claws-mail-tbird2claws/tbird2claws.py", line 124, in convert_tree
os.path.join(out_treepath,outpath,f))
File "/root/Downloads/claws-mail-tbird2claws/tbird2claws.py", line 95, in process_file
offs = harvest_offsets(filepath)
File "/root/Downloads/claws-mail-tbird2claws/tbird2claws.py", line 63, in harvest_offsets
for i,line in enumerate(open(filepath)):
IOError: [Errno 2] No such file or directory: './lock'
问题
- 这些错误是什么意思?
- 如何使这个脚本运行良好?
- 任何其他想法如何将存档消息 + 文件夹结构从 Thunderbird 迁移到 Claws?
tbird2claws.py 文件:
#!/usr/bin/python
# Script name : tbird2claws.py
# Script purpose : Integrate a Thunderbird folder tree to Claws Mail
# Author : Aleksandar Urosevic aka Urke MMI <urke@gmx.net>
# Licence : GPL
# Author: Rodrigo Dias Arruda Senra
#The script receives two parameters from command-line:
#<Thunderbird folder path> <Claws Mail folder path>
#Best way to use it is to go to inside yout Thunderbird
#root mailfolder directory and invoke it as:
#<path>\python2.4 <path>\tbird2claws.py . <path to
#claws-mail>\Mail
import os
import sys
__author__ = 'Rodrigo Senra <rsenra@acm.org>'
__date__ = '2005-03-23'
__version__ = '0.3'
__doc__ = r"""
This module integrates your Mozilla Thunderbird 1.0 tree to
your Claws Mail MH mailbox tree.
The script receives two parameters from command-line:
<Thunderbird folder path> <Claws Mail folder path>
Best way to use it is to go to inside yout Thunderbird
root mailfolder directory and invoke it as:
<path>\python2.4 <path>\tbird2syl.py . <path to claws mail>\Mail
This idiom will avoid the creation of the folder Thunderbird inside
your Claws Mail folder tree.
If the names of your directories match in both trees, files should
be placed in the correct folder.
This is an alpha release, so it may be a little rough around the edges.
Nevertheless, I used it with great success to convert a very large and
deep folder tree.
Please, do backup your claws-mail (destination) folder tree before trying
this out. Live safe and die old!
This code is released in the public domain.
"""
def harvest_offsets(filepath):
"""Given the filepath, this runs through the file finding
the number of the line where a message begins.
The functions returns a list of integers corresponding to
the begining of messages.
"""
offsets = []
i = 0
state = 'begin'
for i,line in enumerate(open(filepath)):
if line.startswith('From - ') and state!='found_head':
offsets.append(i)
continue
# elif line.startswith('Return-Path') and state=='found_head':
# state = 'found_offset'
# offsets.append(i)
# continue
offsets.append(i)
return offsets
def make_messages(outputdir, filepath, offsets, start):
"""Given a filepath holding several messages in Thunderbird format,
extarct the messages and create individual files for them, inside
outputdir with appropriate the appropriate naming scheme.
"""
if not os.path.exists(outputdir):
os.makedirs(outputdir)
if not os.path.exists(filepath):
raise Exception('Cannot find message file %s'%(filepath))
lines = open(filepath).readlines()
aux = offsets[:]
msgoffs = zip(offsets[:-1], aux[1:])
for i,j in msgoffs:
fd = open(os.path.join(outputdir,"%d"%start),"w")
fd.write(''.join(lines[i:j-1])) #-1 to remove first from line
fd.close()
start +=1
def process_file(filepath, outputdir):
"""Integrates a Thunderbird message file into a claws-mail message diretory.
"""
offs = harvest_offsets(filepath)
make_messages(outputdir, filepath, offs, 1)
def clean_path(path):
"""Rename all directories and subdirectories <X>.sbd to <X>
"""
l = []
f = os.path.basename(path)
while f and f != "":
if f.endswith('.sbd'):
f = f[:-4]
l.append(f)
path = os.path.dirname(path)
f = os.path.basename(path)
l.reverse()
r = os.path.join(*l)
return r
def convert_tree(in_treepath, out_treepath):
"""Traverse your thunderbird tree, converting each message file found into
a claws-mail message directory.
"""
for path,subs,files in os.walk(in_treepath):
outpath = clean_path(path)
if files:
for f in [x for x in files if not x.endswith('.msf')]:
process_file(os.path.join(path,f),
os.path.join(out_treepath,outpath,f))
if __name__=='__main__':
if len(sys.argv)<3:
print __doc__
else:
convert_tree(sys.argv[1], sys.argv[2])
解决方案
根据https://github.com/avocado-framework/avocado/issues/818,当您再次运行脚本时,该问题将自行解决。
推荐阅读
- next.js - 使用 NextJS 处理电子商务的上一个会话的最佳方法
- python - Apache Beam 中的窗口连接
- oracle - 重复数据的删除逻辑抛出 ORA-00913: too many values
- laravel - 仅显示您关注的一位用户
- javascript - 需要通过删除 Cookie 来刷新页面,除非 Cookie 中存在预期值(Selenium Webdriver Javascript)
- android-studio - 没有 livedata 的 Android Studio Room 数据
- scala - scala用例匹配输出取决于类型
- c++ - ios_base::sync_with_stdio(0); 有什么区别?和 ios::sync_with_stdio(0); 在 C++ 中?
- google-cloud-platform - Terraform 使用了错误的谷歌项目
- flutter - 无法使用 setstate 颤振关闭 showdialog