在Python中编写二进制文件时,我似乎缺少一些字节.我已经尝试使用"write"函数和"array.tofile"函数.这是一些示例代码:
import zlib, sys, os, array
from struct import unpack
from array import array
inputFile = 'strings.exe'
print "Reading data from: ", inputFile
print 'Input File Size:', os.path.getsize(inputFile)
f = open(inputFile, 'rb')
#compressedDocument =
document = f.read()
documentArray = array('c', document)
print 'Document Size:', len(documentArray)
copyFile = open( 'Copy of ' + inputFile, 'wb')
documentArray.tofile(copyFile)
#copyFile.write(document)
copyFile.close
print 'Output File Size:', os.path.getsize('Copy of ' + inputFile)
print 'Missing Bytes:', os.path.getsize(inputFile) - os.path.getsize('Copy of ' + inputFile)
f.close()
Run Code Online (Sandbox Code Playgroud)
给出以下输出:
Reading data …Run Code Online (Sandbox Code Playgroud) 是否可以从特定位置读取大型二进制文件?
我不想从头开始读取文件,因为我可以计算出我需要的流的起始位置和长度.
我想知道是否可能在python中一次读取一个给定位置的一个字节.我知道,但我想要的东西返回我指定的字节,只返回我指定的字节.如果我写:,它会读取文件的前10个字节.file.read(any number)file.read(10)
我怎么说读字节10只返回字节10?(这必须适用于所有大于一的数字),也请不要上课!
我基本上想将二进制字符串转换为字节数组/列表(以便允许索引,并避免使用substr,因为它的语法对我来说使事情复杂化),我想出了以下MWE:
#!/usr/bin/env perl
use warnings;
use strict;
# Use open ':raw'; # Unknown PerlIO layer class ':raw'
use open IO => ':raw';
binmode(STDIN);
binmode(STDOUT);
# Create original 8-bit byte array/list
my @atmp = (0x80, 0x23, 0x14, 0x0d, 0x0a, 0x00, 0x00, 0x80, 0x43, 0x00, 0x00);
# Make a copy of portion
my @atmp2 = (0) x 2;
@atmp2[0..1] = @atmp[7..8];
# Print output
print "Copied atmp2 contents as hex: " . join(", ", unpack("H2"x2, pack("C"x2,@atmp2))) …Run Code Online (Sandbox Code Playgroud) 我使用socket.recv()通过套接字(蓝牙)从设备接收二进制数据.
我已经考虑过在列表或bytearray中进行缓冲,直到收到足够的数据进行解码和操作.也就是说,直到我收到一个开始和停止标志(字节).
但是,该设备正在应用"八位字节填充".也就是说,下面两个字节的每次出现都应该用一个字节替换,如下所示:
dic = { '\xFE\xDC' : '\xFC' , '\xFE\xDD' : '\xFD' , '\xFE\xDE' : '\xFE'}
Run Code Online (Sandbox Code Playgroud)
此外,在发送数据时,应该应用相反的操作.例如,一个字节0xFC - >产生两个字节0xFE,0xDC.
真正发生的是当填充(发送数据)时,如果检测到0xFC,0xFD,0xFE之一,则在字节之前添加0xFE,该字节本身是异或0x20.在取消填充(接收数据)时,0XFE被丢弃,后面的字节被异或为0x20.
说我对Python很陌生是一种轻描淡写的说法.我昨天开始编码,有一个界面启动并运行.然而,这有点棘手.
我知道我可以将数据放入字符串并进行替换.但是要将二进制数据打包成字符串,替换然后解压缩和解码似乎有点低效.
我还可以观察传入的数据,并在看到0xFE标志时动作.什么是好的是填充/取消列表,bytearray等等的方法.
替换列表或bytearray中的单个字节似乎并不太难,但用两个或另一个方式替换一个...?
任何帮助非常感谢.
(顺便说一下,这是Python 2.7.)
我有一个很大的(1200万行)data.table,看起来像这样:
library(data.table)
set.seed(123)
dt <- data.table(id=rep(1:3, each=5),y=sample(letters[1:5],15,replace = T))
> dt
id y
1: 1 b
2: 1 d
3: 1 c
4: 1 e
5: 1 e
6: 2 a
7: 2 c
8: 2 e
9: 2 c
10: 2 c
11: 3 e
12: 3 c
13: 3 d
14: 3 c
15: 3 a
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的data.table包含我的变量id(这将是这个新的独特的键data.table)和其他5个二元变量每一个对应于每个类别的y内搭的值1,如果ID对于该值y,0否则.
输出data.table应如下所示:
id a …Run Code Online (Sandbox Code Playgroud) 我有一个中等大的数据帧,我想要将一个列的类别转换为二进制列,每个类别一个.
同时,我希望将其余列保留在数据框中.
实现这一目标最简单的方法是什么?
这是我想要做的一个例子:
d<-data.frame(ID=c("a","b","c","d"), Gender=c("male", "male", "female","female"), Age =c(23,45,18,11))
ID Gender Age
1 a male 23
2 b male 45
3 c female 18
4 d female 11
Run Code Online (Sandbox Code Playgroud)
之后应该看作d2,这样ID和Age列仍然存在并且不受影响:
d2<-data.frame(ID=c("a","b","c","d"), Gender.male=c(1, 1, 0, 0), Gender.female=c(0,0,1,1), Age =c(23,45,18,11))
ID Gender.male Gender.female Age
1 a 1 0 23
2 b 1 0 45
3 c 0 1 18
4 d 0 1 11
Run Code Online (Sandbox Code Playgroud) Python provides the following three modules that deal with C types and how to handle them:
struct for C structsarray for arrays such as those in Cctypes for C functions, which necessarily entails dealing with C’s type systemWhile ctypes seems more general and flexible (its main task being “a foreign function library for Python”) than struct and array, there seems to be significant overlap in functionality between these three modules when the task is to read …
我使用 Fortran 按以下格式将数据写入二进制文件
open(unit=99,form='unformatted',status='unknown')
do i=1,N
write(99) (i),(A(i)),(B(i))
enddo
close(99)
Run Code Online (Sandbox Code Playgroud)
这里,A和B是双精度数组。如何在python中读取这个二进制数据文件?
PS:到目前为止,我尝试了以下步骤来读取数据。
with open('fort.99', 'rb') as binfile:
data=binfile.read()
Run Code Online (Sandbox Code Playgroud)
虽然文件读取成功,但我无法使用numpy这些数据的功能,这是我大多数分析的首选。
在内存中 128 将被存储为10000000. 如果我在字节数据类型中存储 -128,我应该在哪里放置符号位,因为整个 1 字节被数字 128 占用?
你能解释一下吗?