使用 python 删除 txt 文件每行开头的特定字符串 char
Remove specific string char at the beginning of each lines of a txt file using python
我目前正在 python 编写脚本。
我想将 xls 文件转换为 txt 文件,但我还想清理和管理数据。
在 xls 文件中,有 4 列让我感兴趣。这是我从转换中获得的 txt 示例:
OPEN 0 a_inst0 signal_a
OPEN 0 b_inst0 signal_b
a_inst0 signal_c OPEN 0
c_inst0 signal_d OPEN 0
为了得到这个结果,我使用了这个脚本:
import re
# Function to convert
def listToStringOpen(s):
str1 = ""
for ele in s:
str1 += ele
str1 += "\n"
return str1
import pandas as pd
df = pd.read_excel('my_xls.xlsm', sheet_name='Sheet1', usecols="A:D")
with open('my_txt.txt', 'w', encoding ='utf-8', errors='ignore') as outfile:
df.to_string(outfile)
with open('my_txt.txt', 'r', encoding ='utf-8', errors='ignore') as f:
data = f.readlines()
DONOTIGNORE2 = 'OPEN'
cleaned_lines = []
for line in data:
if (DONOTIGNORE2 not in line) :
continue
cleaned_lines.append(line.rstrip())
with open('result_open.txt', 'w', encoding ='utf-8', errors='ignore') as f:
f.write(listToStringOpen(cleaned_lines))
这是一个好的开始,但现在我想删除每个文件的“OPEN 0”,但我不知道该怎么做,因为它可以放在 A:B 列中或在 C:D 列中。此外,txt 中的结果未垂直对齐 :( 。
你有什么想法吗?
非常感谢
请在下面找到更新后的代码。
这是我输入的内容,添加了几行以确保其正常工作..
少量更改:
- read_excel 有
header=None
因为你的数据没有 header
- 在写入my_txt时,我添加了
index=False, header=False
,这样txt文件就没有添加索引,也没有headers。这样你的输出文件将只有数据
- 我使用数据框来清理仅在 A:B 或 C:D 列中的 OPEN 和“0”。否则,别管他们。
import re
# Function to convert
def listToStringOpen(s):
str1 = ""
for ele in s:
str1 += ele
str1 += "\n"
return str1
import pandas as pd
df = pd.read_excel('my_xls.xlsm', sheet_name='Sheet1', usecols="A:D", header=None)
with open('my_txt.txt', 'w', encoding ='utf-8', errors='ignore') as outfile:
df.to_string(outfile, index=False, header=False)
with open('my_txt.txt', 'r', encoding ='utf-8', errors='ignore') as f:
data = f.readlines()
df = df.astype(str)
cleaned_lines = []
row = 0
for row in range(len(df)):
print(df.iloc[row,:][0], df.iloc[row,:][1], df.iloc[row,:][2], df.iloc[row,:][3])
if ((df.iloc[row,:][0].strip() == 'OPEN') and (df.iloc[row,:][1].strip() == "0")) :
df.iloc[row,:][0] = ""
df.iloc[row,:][1] = ""
elif ((df.iloc[row,:][2].strip() == 'OPEN') and (df.iloc[row,:][3].strip() == "0")):
df.iloc[row,:][2] = ""
df.iloc[row,:][3] = ""
with open('result_open.txt', 'w', encoding ='utf-8', errors='ignore') as f:
df.to_string(f, index=False, header=False)
我目前正在 python 编写脚本。 我想将 xls 文件转换为 txt 文件,但我还想清理和管理数据。 在 xls 文件中,有 4 列让我感兴趣。这是我从转换中获得的 txt 示例:
OPEN 0 a_inst0 signal_a
OPEN 0 b_inst0 signal_b
a_inst0 signal_c OPEN 0
c_inst0 signal_d OPEN 0
为了得到这个结果,我使用了这个脚本:
import re
# Function to convert
def listToStringOpen(s):
str1 = ""
for ele in s:
str1 += ele
str1 += "\n"
return str1
import pandas as pd
df = pd.read_excel('my_xls.xlsm', sheet_name='Sheet1', usecols="A:D")
with open('my_txt.txt', 'w', encoding ='utf-8', errors='ignore') as outfile:
df.to_string(outfile)
with open('my_txt.txt', 'r', encoding ='utf-8', errors='ignore') as f:
data = f.readlines()
DONOTIGNORE2 = 'OPEN'
cleaned_lines = []
for line in data:
if (DONOTIGNORE2 not in line) :
continue
cleaned_lines.append(line.rstrip())
with open('result_open.txt', 'w', encoding ='utf-8', errors='ignore') as f:
f.write(listToStringOpen(cleaned_lines))
这是一个好的开始,但现在我想删除每个文件的“OPEN 0”,但我不知道该怎么做,因为它可以放在 A:B 列中或在 C:D 列中。此外,txt 中的结果未垂直对齐 :( 。 你有什么想法吗?
非常感谢
请在下面找到更新后的代码。 这是我输入的内容,添加了几行以确保其正常工作..
少量更改:
- read_excel 有
header=None
因为你的数据没有 header - 在写入my_txt时,我添加了
index=False, header=False
,这样txt文件就没有添加索引,也没有headers。这样你的输出文件将只有数据 - 我使用数据框来清理仅在 A:B 或 C:D 列中的 OPEN 和“0”。否则,别管他们。
import re
# Function to convert
def listToStringOpen(s):
str1 = ""
for ele in s:
str1 += ele
str1 += "\n"
return str1
import pandas as pd
df = pd.read_excel('my_xls.xlsm', sheet_name='Sheet1', usecols="A:D", header=None)
with open('my_txt.txt', 'w', encoding ='utf-8', errors='ignore') as outfile:
df.to_string(outfile, index=False, header=False)
with open('my_txt.txt', 'r', encoding ='utf-8', errors='ignore') as f:
data = f.readlines()
df = df.astype(str)
cleaned_lines = []
row = 0
for row in range(len(df)):
print(df.iloc[row,:][0], df.iloc[row,:][1], df.iloc[row,:][2], df.iloc[row,:][3])
if ((df.iloc[row,:][0].strip() == 'OPEN') and (df.iloc[row,:][1].strip() == "0")) :
df.iloc[row,:][0] = ""
df.iloc[row,:][1] = ""
elif ((df.iloc[row,:][2].strip() == 'OPEN') and (df.iloc[row,:][3].strip() == "0")):
df.iloc[row,:][2] = ""
df.iloc[row,:][3] = ""
with open('result_open.txt', 'w', encoding ='utf-8', errors='ignore') as f:
df.to_string(f, index=False, header=False)