我试图在python中读取一个gunzipped文件(.gz),但我遇到了一些麻烦.
我使用gzip模块读取它,但文件被编码为utf-8文本文件,因此最终它会读取无效字符并崩溃.
有谁知道如何读取编码为utf-8文件的gzip文件?我知道有一个编解码器模块可以提供帮助,但我无法理解如何使用它.
谢谢!
import string
import gzip
import codecs
f = gzip.open('file.gz','r')
engines = {}
line = f.readline()
while line:
parsed = string.split(line, u'\u0001')
#do some things...
line = f.readline()
for en in engines:
print(en)
Run Code Online (Sandbox Code Playgroud) 我想逐行读取文件,而不知道以前的行长度.这是我到目前为止所得到的:
int ch = getc(file);
int length = 0;
char buffer[4095];
while (ch != '\n' && ch != EOF) {
ch = getc(file);
buffer[length] = ch;
length++;
}
printf("Line length: %d characters.", length);
char newbuffer[length + 1];
for (int i = 0; i < length; i++)
newbuffer[i] = buffer[i];
newbuffer[length] = '\0'; // newbuffer now contains the line.
Run Code Online (Sandbox Code Playgroud)
我现在可以计算出行长度,但仅适用于短于4095个字符的行,加上两个char数组似乎是执行任务的一种尴尬方式.有没有更好的方法来做到这一点(我已经使用了fgets(),但被告知它不是最好的方式)?
--Ry
我正在尝试逐字节读取文件,但我不知道该怎么做.我试着这样做:
file = open(filename, 'rb')
while 1:
byte = file.read(8)
# Do something...
Run Code Online (Sandbox Code Playgroud)
那么这会使变量字节在每个循环开始时包含8个下一位吗?这些字节究竟是什么并不重要.唯一重要的是我需要读取8位堆栈中的文件.
编辑:
此外,我在列表中收集这些字节,我想打印它们,以便它们不打印为ASCII字符,但作为原始字节,即当我打印该bytelist时,它将结果显示为
['10010101', '00011100', .... ]
Run Code Online (Sandbox Code Playgroud) 在VB.NET Windows窗体应用程序中,如何为某人添加单击按钮或图像的功能,并打开文件浏览器以浏览到文件并将其路径分配给变量,以便将该文件复制到另一个特定路径?
我需要将所有文件从源文件夹移动到目标文件夹.如何从文件路径名中轻松提取文件名?
string newPath = "C:\\NewPath";
string[] filePaths = Directory.GetFiles(_configSection.ImportFilePath);
foreach (string filePath in filePaths)
{
// extract file name and add new path
File.Delete(filePath);
}
Run Code Online (Sandbox Code Playgroud) 我使用控制台应用程序写出一个逗号分隔文件,而不是使用Process打开文件.将查询结果转储到excel是一种快速而又脏的方法.
有一段时间这很好用,但最近我开始得到" 你试图打开的文件'blah.csv',格式与文件扩展名不同 ".
而且点击"是"后
Excel检测到blah.csv是一个SYLK文件,但无法加载它.文件有错误或不是SYLK文件格式.单击"确定"以尝试以其他格式打开文件.
按OK打开它,并正确显示.
我在网络世界中看到了一些添加内容处置标题的解决方案,但由于我使用进程打开它,我无法应用该修复.
我的代码打开文件:
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = filePath;
info.UseShellExecute = true;
Process.Start(info);
Run Code Online (Sandbox Code Playgroud)
如果我在Notepad ++中打开文件并显示所有字符,它只显示为具有CR LF行结尾的常规CSV.
经过一番调查,看起来标题行正在触发错误.如果我只是在标题之前写一个空行,那么错误就会消失.标题看起来像这样:
heading1,heading2,heading3 CRLF
编辑:我现在有一个解决方案,但我真的很清楚简要描述不同的限制是什么,即由FD_SIZE,launchtl限制文件,sysctl -w kern.maxfilesperproc,ulimit等设置的限制.
有人可以帮我理解OSX上打开文件句柄的限制.ulimit给了我一个答案:
$ ulimit -a
...
open files (-n) 256
Run Code Online (Sandbox Code Playgroud)
我无法ulimit改变这一点,但人们建议使用launchctl(例如http://usrinapto.wordpress.com/2010/03/06/mac-os-x-10-6-max-open-files-too-many -open-files /)
但是,使用它不会改变报告的限制ulimit.
但是,我的应用程序似乎能够在崩溃之前打开10k文件lsof,例如:
$ lsof -p 87599 | wc
10279 92505 1418903
Run Code Online (Sandbox Code Playgroud)
(它可靠地在10279和10305打开的文件之间崩溃)
所以有明显不同的限制.我也看过(在上面的链接上)的谈话FD_SETSIZE.
有人可以向我解释不同的限制是什么,以及它们是如何设置的?
如果它是相关的,我正在使用SWIG包装一个用于Java的C/C++库.
编辑:我也尝试过:
sudo sysctl -w kern.maxfiles=20000
Run Code Online (Sandbox Code Playgroud)
没有成功.也
#define FD_SETSIZE 20000
Run Code Online (Sandbox Code Playgroud)
没有效果.
编辑:也尝试过
launchctl limit maxfiles 20000 20000
Run Code Online (Sandbox Code Playgroud)
没有效果.
编辑:解决方案:
sysctl -w kern.maxfilesperproc=20000
Run Code Online (Sandbox Code Playgroud)
(来自http://krypted.com/mac-os-x/maximum-files-in-mac-os-x/)
编辑:我已经编写了一个小程序来测试它(基于如何在Mac OS X上增加C中"最大打开文件"的限制),并发现我可以要求的最大打开文件数是10240:
#include <sys/resource.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
struct …Run Code Online (Sandbox Code Playgroud) 如何构建原子文件写操作?该文件由Java服务编写,并由python脚本读取.
对于记录,读取远远大于写入.但是写入分批发生并且往往很长.文件大小相当于兆字节.
现在我的方法是:
这是正确的方法吗?如何避免旧文件被删除但新文件名尚未重命名的情况?
这些编程语言(python和java)是否提供锁定和避免这种情况的构造?
我有大约50 GB的文本文件,我正在检查每行的前几个字符,并将其写入为该起始文本指定的其他文件.
例如.我的输入包含:
cow_ilovecow
dog_whreismydog
cat_thatcatshouldgotoreddit
dog_gotitfromshelter
...............
Run Code Online (Sandbox Code Playgroud)
所以,我想在牛,狗和猫(约200个)类别中处理它们,所以,
if writeflag==1:
writefile1=open(writefile,"a") #writefile is somedir/dog.txt....
writefile1.write(remline+"\n")
#writefile1.close()
Run Code Online (Sandbox Code Playgroud)
那么,什么是最好的方式,我应该关闭吗?否则,如果我保持开放,writefile1=open(writefile,"a")做正确的事情?