使用正则表达式在大型二进制文件(2 GB 或更大)中搜索(多个)字符串的最佳方法是什么。
二进制数据只是“原始”数据(如内存转储),并且字符串不受限制。
我可以通过逐行读取文件来在大型文本文件中执行此操作。我想我需要以块的形式读取文件,但是存在边界风险(匹配位于块边界上)
如何搜索二进制数据。
非常感谢一个简短的例子。
编辑:我没有看到相似之处。我根本不清楚
我想删除任何列包含关键字之一的行
keywords=['Nokia' , 'Asus']
data = [['Nokia', 'AB123','broken'], ['iPhone', 'DF747','battery'], ['Acer', 'KH298','exchanged for a nokia'], ['Blackberry', 'jj091','exchanged for a Asus']]
df = pd.DataFrame(data, columns = ['Brand', 'ID', 'Description'])
Run Code Online (Sandbox Code Playgroud)
df 之前:
Brand | ID | Description
----------------------------------------
Nokia | AB123 | broken
iPhone | DF747 | battery
Acer | KH298 | exchanged for a nokia
Blackberry | jj091 | exchanged for a Asus
Run Code Online (Sandbox Code Playgroud)
df 之后:
Brand | ID | Description
----------------------------------------
iPhone | DF747 | battery
Acer | KH298 | exchanged …Run Code Online (Sandbox Code Playgroud) 我想从文件中更改文件名后缀(使用bash脚本),但有时会有一个句点和一些带有两个句点的文件.
现在我用这个:
new_file=`echo ${file} | sed 's/\(.*\.log.*\)'${suf}'/\1.'${num}'/'`
Run Code Online (Sandbox Code Playgroud)
其中'new_file'是新文件名,'file'是原始文件名,'$ {suf}'是文件的后缀,$ {num}是新号码.
因此some.log必须成为some.log.1,some.log.1必须成为some.log.2.使用我的代码some.log成为some.log.1,但some.log.1仍然是some.log.1.
我希望我足够清楚.我很感激任何建议(甚至不使用sed).
更新:
@paxdiablo.我认为测试出了问题.
现在我用这段代码作为测试;
#!/usr/bin/bash
shft() {
for suff in {6..1} ; do
if [[ -f "$1.${suff}" ]] ; then
((nxt = suff + 1))
echo Moving "$1.${suff}" to "$1.${nxt}"
mv -f "$1.${suff}" "$1.${nxt}"
fi
done
echo Moving "$1" to "$1.1"
mv -f "$1" "$1.1"
}
clear
folder=~/logs/*.log
for i …Run Code Online (Sandbox Code Playgroud) 我使用BinaryReader读取文件,我遇到了无法解决的问题.(C#)
我需要读4个字节.当我用我的十六进制查看器查看这些字节时00 00 00 13.所以我试过Int32 fLength = dbr.ReadInt32();结果是318767104而不是19(我期望和需要的).当我使用时,byte[] fLength = dbr.ReadBytes(4);我可以看到我已经读取了正确的字节[0] [0] [0] [19].
(我对下面的字节有同样的问题)
我如何读取这4个字节并获得19作为结果.
提前致谢 !
Robertico
I've a DataFrame with a Company column.
Company
-------------------------------
Tundra Corporation Art Limited
Desert Networks Incorporated
Mount Yellowhive Security Corp
Carter, Rath and Mueller Limited (USD/AC)
Barrows corporation /PACIFIC
Corporation, Mounted Security
Run Code Online (Sandbox Code Playgroud)
I've a dictionary with regexes to normalize the company entities.
(^|\s)corporation(\s|$); Corp
(^|\s)Limited(\s|$); LTD
(^|\s)Incorporated(\s|$); INC
...
Run Code Online (Sandbox Code Playgroud)
I need to normalize only the last occurrence. This is my desired output.
Company
-------------------------------
Tundra Corporation Art LTD
Desert Networks INC
Mount Yellowhive Security Corp
Carter, Rath and Mueller LTD …Run Code Online (Sandbox Code Playgroud) 我正在尝试优化下面的代码(PySpark UDF)。
它给了我想要的结果(基于我的数据集),但在非常大的数据集(大约 180M)上它太慢了。
结果(准确性)优于可用的 Python 模块(例如 geotext、hdx-python-country)。所以我不是在寻找另一个模块。
数据框:
df = spark.createDataFrame([
["3030 Whispering Pines Circle, Prosper Texas, US","John"],
["Kalverstraat Amsterdam","Mary"],
["Kalverstraat Amsterdam, Netherlands","Lex"]
]).toDF("address","name")
Run Code Online (Sandbox Code Playgroud)
正则表达式.csv:
iso2;keywords
US;\bArizona\b
US;\bTexas\b
US;\bFlorida\b
US;\bChicago\b
US;\bAmsterdam\b
US;\bProsper\b
US;\bUS$
CA;\bAlberta\b
CA;\bNova Scotia\b
CA;\bNova Scotia\b
CA;\bWhitehorse\b
CA;\bCA$
NL;\bAmsterdam\b
NL;\Netherlands\b
NL;\bNL$
......<many, many more>
Run Code Online (Sandbox Code Playgroud)
从regex.csv, group byiso2并加入keywords( \bArizona\b|\bTexas\b\bFlorida\b|\bUS$)创建 Pandas DataFrame 。
df = pd.read_csv(regex.csv, sep=';')
df_regex = df.groupby('iso2').agg({'keywords': '|'.join }).reset_index()
Run Code Online (Sandbox Code Playgroud)
功能:
def get_iso2(x):
iso2={}
for j, row in df_regex.iterrows():
regex …Run Code Online (Sandbox Code Playgroud) 我搜索我的 DataFrame 的所有列(除了第一列)并添加一个带有匹配列名称的新列“Matching_Columns”,当我在测试我的模式是否包含在一行中之前尝试删除所有点时,我收到一个错误.
这有效:
keyword='123456789'
f = lambda row: row.apply(str).str.contains(keyword ,na=False, flags=re.IGNORECASE)
df1 = df.iloc[:,1:].apply(f, axis=1)
df.insert(loc=1, column='Matching_Columns', value=df1.dot(df.columns[1:] + ', ').str.strip(', '))
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
keyword='123456789'
f = lambda row: row.apply(str).str.replace(".","").contains(keyword ,na=False, flags=re.IGNORECASE)
df1 = df.iloc[:,1:].apply(f, axis=1)
df.insert(loc=1, column='Matching_Columns', value=df1.dot(df.columns[1:] + ', ').str.strip(', '))
Run Code Online (Sandbox Code Playgroud)
错误:
AttributeError: ("'Series' object has no attribute 'contains'", 'occurred at index 0')
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这有什么问题。看起来str.replace(".","")是导致错误的原因。
任何帮助,将不胜感激
我需要从字符串值中获取倒数第二个单词。
df = spark.createDataFrame([
["sample text 1 AFTEDGH XX"],
["sample text 2 GDHDH ZZ"],
["sample text 3 JEYHEHH YY"],
["sample text 4 QPRYRT EB"],
["sample text 5 KENBFBF XX"]
]).toDF("line")
+--------+
|word |
+--------+
|AFTEDGH |
|GDHDH |
|JEYHEHH |
|QPRYRT |
|KENBFBF |
+--------+
Run Code Online (Sandbox Code Playgroud)
我试过:
df_new = df.withColumn('word', F.split(F.col('line'), ' ')[-2])
df_new = df.withColumn('word', F.reverse(F.split(F.col('line'), ' '))[-2])
Run Code Online (Sandbox Code Playgroud)
但他们返回 Null
解析JSON文件后,我需要使用PHP创建动态html表。
我的表需要这种列结构;Name | Status | Age | Count | Progress | Bad
如何为从JSON文件解析的每个“记录”创建新行(我可以创建制表符分隔的字符串)。
另一个困难是,某些“记录”仅包含“名称”列的数据,而另一些则包含所有列的数据。
所以我的问题是如何在表中动态添加一行并填充右列?
(JSON文件的关键是列标题)
JSON格式的示例:
{
"John": {"status":"Wait" },
"Jennifer": {"status":"Active" },
"James": {"status":"Active","age":56,"count":10,"progress":0.0029857,"bad":0}
}
Run Code Online (Sandbox Code Playgroud) 只是关于我的问题的简短描述.
我有两列[ name]和[ address]以某种方式,(部分)地址与名称在同一单元格中(从csv文件导入).
我想在名称列中拆分字符串(拆分为'2 /')并将地址部分添加到列[ address]并将名称保留在[ name]列中.
只需在[ address]为空时移动它,如果[ address]不为空则加入.
请在下面找到一个示例.
来自csv的原始数据:
name;address
Markus M Berg;Kirchenallee 52
Johanna P Wirth 2/Ufnau Strasse 48;
Felix B Beike 2/Mohrenstrasse 47;Dormettingen
Run Code Online (Sandbox Code Playgroud)
现在的情况
name | address
------------------------------------------------------------
Markus M Berg | Kirchenallee 52
Johanna P Wirth 2/Ufnau Strasse 48 |
Felix B Beike 2/Mohrenstrasse 47 | Dormettingen
Run Code Online (Sandbox Code Playgroud)
期望的情况:
name | address
------------------------------------------------------------
Markus M Berg | Kirchenallee 52
Johanna P Wirth | Ufnau Strasse 48
Felix B …Run Code Online (Sandbox Code Playgroud) 我有一个包含GPS坐标的MySQL数据库.这是我检索坐标的部分PHP代码;
$sql = "SELECT lat, lon FROM gps_data";
$stmt=$db->query($sql);
$result=$stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)
现在我需要将返回的PHP数组"转换"为javascript中的数组数组.我已经试过了;
var js_var = <?php echo json_encode($result); ?>;
Run Code Online (Sandbox Code Playgroud)
但这不是理想的输出
电流输出:
var js_var = [{"lat":"61.883350","0":"61.883350","lon":"8.551115","1":"8.551115"},{"lat":"61.883380","0":"61.883350","lon":"8.551715","1":"8.551715"}];
Run Code Online (Sandbox Code Playgroud)
期望的输出:
var js_var =
[[61.883350,8.551115],[61.883380,8.551715]];
Run Code Online (Sandbox Code Playgroud)
怎么实现这个?
我需要将字典转换为列表,其中键重复值的次数。
dict = {'foo':3, 'bar':1}
Run Code Online (Sandbox Code Playgroud)
期待结果:
['foo', 'foo', 'foo', 'bar']
Run Code Online (Sandbox Code Playgroud) python ×5
pandas ×4
python-3.x ×4
binary ×2
dataframe ×2
php ×2
pyspark ×2
regex ×2
apache-spark ×1
arrays ×1
byte ×1
c# ×1
dictionary ×1
filenames ×1
html ×1
html-table ×1
javascript ×1
json ×1
list ×1
mysql ×1
python-2.7 ×1
python-3.7 ×1
rename ×1
row ×1
scala ×1
sed ×1
shell ×1
split ×1