从 zip 文件中读取文件并将其写入另一个文件时面临的问题

Posted

技术标签:

【中文标题】从 zip 文件中读取文件并将其写入另一个文件时面临的问题【英文标题】:Facing Problems when reading a file from a zip file and writing it to another file 【发布时间】:2012-03-01 17:14:44 【问题描述】:

我编写了一个 python 脚本,它执行以下操作:

1)它从特定路径读取 zip 文件中的日志文件 (.jrn),并将其写入另一个路径上的文本文件。

2) 文本文件由另一个 python 脚本(比如 x.py)读取以执行某些特定操作。

我面临的问题是,写入的文本文件,虽然它的内容与日志文件(从 zipfile 读取)中的内容相同,但当它被另一个 python 脚本读取时,比如 x.py,一些特殊的字符被读取,导致脚本失败。

当 x.py 脚本读取原始 jrn 文件(在 zip 文件中)时,它正在成功处理..

我使用的是python 2.4版本,所以我不能使用Zipfile库的extract()函数。

我只希望写入的文本文件的内容与从 zip 读取的 jrn 文件的内容完全相同。请帮忙。

代码:

fout = zipfile.ZipFile(os.path.join(Out_path_Afp,Out_Path_Afp_File),'r')
files = fout.namelist()
dir = filter(lambda x:os.path.splitext(string.lower(x))[1]=='.jrn',files)
out_zip_files_pdf = re.compile('WW_'+Input_file_name+'_Restsoe_toload_prod.jrn')
pdf_jrn_list = filter(lambda x:out_zip_files_pdf.match(x),files)
for pdf_jrn_ls in pdf_jrn_list:
    pdf_jrn = pdf_jrn_ls    
print pdf_jrn
data_jrn_pdf = fout.read(pdf_jrn)
txt_outpath = "e:\\senthil\\log_recon\\jrn\\"
txt_outfile_pdf = time.strftime("%Y%m%d_%H%M",LocalTime)+'WW_'+Input_file_name+'_Restsoe_toload_prod.txt'

Output_Ptr_pdf = open(txt_outpath + txt_outfile_pdf,'w')
Output_Ptr_pdf.write(data_jrn_pdf)
Output_Ptr_pdf.close()

【问题讨论】:

【参考方案1】:

如果您是直接复制,则无需亲自从文件中提取数据。只需解压缩并How do I copy a file in python?

虽然看起来您可能不会直接复制。 jrn 文件文本是否编码?您是否正在尝试写入 PDF?您的代码建议如此,但您的描述没有。

【讨论】:

嗨..我正在尝试写入 txt 文件,但 jrn 文件未编码。 嗨..我试图写入一个txt文件并且jrn文件没有被编码。在纯文本中,文本文件的内容与jrn文件完全相同..但内部有些特殊正在插入字符.. 所以 jrn 是直接的 ASCII 或 UTF-8,而您正试图以相同的文本编码复制文件,具有相同的内容,对吗?如果是这样,在该线程中解压缩并使用上述解决方案应该可以正常工作。 哦,我想我明白了。您正在尝试将文件列表的内容编译为单个文件。我不确定你认为 for 循环在做什么;你最终要做的就是使用列表中的最后一个 pdf_jrn,只需 pdf_jrn = pdf_jrn_list[-1] 就可以更容易地完成。我认为你的意思是在循环中有更多的代码。 是的..你的假设是正确的。但是我正在使用 python 2.4 版本,其中 extract() 不起作用.. python 2.4 是商业中使用的版本,到目前为止我无法更改?除了解压还有其他方法吗?

以上是关于从 zip 文件中读取文件并将其写入另一个文件时面临的问题的主要内容,如果未能解决你的问题,请参考以下文章

java 读取当前java文件的数据并将其写入另一个文件

编写一个 Bash shell 脚本来读取 mongodb 日志文件并将其内容写入另一个文本文件

从文件中读取数据并将其写入不同的文件(Visual Studio 2012)

作业无法从一个 ORC 文件读取并将子集写入另一个

如何在 C++ 上读取文件、反转部分文本并将反转的部分写入另一个文件?

从 BigQuery 读取数据并将其写入云存储上的 avro 文件格式