我有一个如下所示的输入文件(请注意文件中可能没有空行。)
11111*作者姓名
22222*日期
11111 01 Var-1
11111 02 Var-2
11111 02 Var-3
将使用的规则:
预期产出01,Var-1,02,Var-2,02,Var-3
下面是我试图打印记录的代码。但是,我无法在每个文本之后得到逗号(,)。有些以空格作为前缀。有人能帮忙吗?
with open("D:/Desktop/Files/Myfile.txt","r") as file_in:
for lines in file_in:
if "*" not in lines:
lines_new = " ".join(lines.split())
lines_fin = lines_new.replace(' ',',')
print(lines_fin,end=' ')发布于 2022-10-19 20:11:10
假设你只想一个接一个地打印它们(它们仍然是分开的)
with open("D:/Desktop/Files/Myfile.txt","r") as file_in:
for line in file_in:
if line == "\n": # skip empty lines
continue
if line[5] == "*": #skip if asterix at 6th position
continue
line = line.strip() # remove trailing and starting whitespace
line = line.replace(' ', ',') # replace remaining spaces with commas
print(line, ',') 如果你只想把它们全部结合起来,那么更好的方法是:
with open("D:/Desktop/Files/Myfile.txt","r") as f:
all_lines = f.readlines()
all_lines = [line.strip().replace(" ",",") for line in all_lines if line != "\n" and line[5] != "*"]
all_lines = ",".join(all_lines)我还没有测试过这个,所以可能有排字!
发布于 2022-10-20 07:10:08
我将使用Python的路径库,因为它具有一些处理路径和读取文本文件的有用功能。
要将项连接在一起,可以将想要加入的项放到Python中,然后在列表上使用join方法。
我还改变了您如何分割数据的逻辑。当一行被保留时,行总是被删除的前6个字符,这样这些字符就可以被分割掉。如果您首先这样做,它会使空白上的分隔更加清晰,因为您得到了您正在寻找的两个项目。
如果数据长度超过72个字符,似乎需要截断它,所以我将数据行限制为72个字符。
这就是我的测试代码的样子:
from pathlib import Path
data_file = Path("D:/Desktop/Files/Myfile.txt")
field_size = 72
def combine_file_contents(filename):
combined_data = []
for line in filename.read_text().splitlines():
if line and line[5] != "*":
combined_data.extend(line[6:field_size].split())
return ','.join(combined_data)
if __name__ == '__main__':
expected_output = "01,Var-1,02,Var-2,02,Var-3"
output_data = combine_file_contents(data_file)
print("New Output: ", output_data)
print("Expected Output:", expected_output)
assert output_data == expected_output当我使用问题中的测试数据运行时,这给出了以下输出:
New Output: 01,Var-1,02,Var-2,02,Var-3
Expected Output: 01,Var-1,02,Var-2,02,Var-3发布于 2022-10-20 07:53:40
我认为regex解决方案很优雅
您需要处理数据长度为72的限制,但这不应该是一个问题。
import re
pattern = r'[\s\d]{6}(.+)'
out = []
with open('combinestrings.txt', 'r') as infile:
for line in infile:
result = re.findall(pattern, line)
if result:
out.append(','.join(result[0].split(' ')))
print(','.join(out))产出:
01,Var-1,02,Var-2,02,Var-3https://stackoverflow.com/questions/74131083
复制相似问题