我使用这个 ruby 代码生成了一个 .rxdata
文件
class A < Array
def initialize
@a = Object.new
@b = :b
@c = @a
@d = @b
@e = Object.new
end
end
str = Marshal.dump( A.new )
file = File.open("./users.rxdata", "w")
file.write str
file.close
这是生成的字节码
04 08 49 43 3A 06 41 5B 00 [0D] 0A 3A 07 40 61 6F ..IC:.A[...:.@ao
3A 0B 4F 62 6A 65 63 74 00 3A 07 40 62 3A 06 62 :.Object.:.@b:.b
3A 07 40 63 40 06 3A 07 40 64 3B 09 3A 07 40 65 :.@c@.:.@d;.:.@e
6F 3B 07 00 o;..
但是索引 9 中有一个意外的 0D
字节。0D
在这里的作用是什么?
红宝石版本:
>ruby.exe --version
ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x64-mingw32]
答案 0 :(得分:1)
我在 dump_spec.rb 中找到了此代码
p "\004\bi\n".unpack("H*").first
所以我打印了 "0408690a"
结果是 File.open("./users2.rxdata", "w") { |file| file.write("\004\bi\n") }
我把它写入文件
04 08 69 0D 0A
并检查字节码为 0D
这里的 str = Marshal.dump( 5 )
File.open("./users.rxdata", "w") {|file| file.write(str) }
被解释为 ASCII 控制字符 (0x00-0x1F)“回车”
所以当你执行这段代码时
04 08 69 0D 0A
会发现你的字节码变成这样 df_item_in_desc = pd.DataFrame(columns = df.columns) # to hold all satisfied results
for index in df.shape[0]:
s1 = set(df.iloc[index]['desc_words_short'])
if item_number in s1:
df_item_in_desc = df_item_in_desc.append(df.iloc[index])
如何在写入文件时忽略 ASCII 控制字符