我运行了grep
命令,在大型数据目录中找到了数百个字符串实例。这个文件是2 MB并且有我想要提取的字符串并放入Excel文件以便以后轻松访问。我正在提取的部分是我需要稍后处理的数据文件的路径。
我最近一直在阅读有关Python的内容,并认为我可以自动地进行这种提取。但我有点难过如何开始。到目前为止我有这个:
data = open("C:\python27\text.txt").read()
if "string" in data:
但是后来我不知道该怎样用来摆脱我想要的文件。初学者要嚼什么东西?
修改
这里有一些关于我在寻找什么的更多信息。我在文本文件中有几百行。每一行都有一个路径和一些像这样的字符串:
/path/to/file:STRING=SOME_STRING, ANOTHER_STRING
我希望从这些行中获得具有特定“STRING = SOME_STRING”的那些行的路径。例如,如果该行看起来像这样,我希望将路径(/path/to/file
)提取到另一个文件:
/path/to/file:STRING=SOME_STRING
答案 0 :(得分:3)
所有这些都可以通过标准Python轻松完成,但对于“excel”(xls或xlsx)文件 - 您必须为此安装第三方库。但是,如果您只需要一个可以在传感器上打开的2D表格,您可以使用逗号分隔值(CSV)文件 - 这些文件可以与Excel和其他电子表格软件共同使用,并集成在Python中。
至于在文件中搜索字符串,它很简单。大多数事情你甚至可能都不需要正则表达式。你想要什么信息和字符串?
此外,标准库上的“os”模块具有列出目录或目录树中所有文件的一些功能。最简单的是os.listdir(路径)
“count”和“find”之类的字符串方法可以在“in”之外使用,以在文件中定位字符串,或计算出现次数。
最后,“CSV”模块可以编写一个格式正确的文件,以便在电子表格中读取。
除此之外,您可能会滥用python的buit-in列表对象作为操纵数据集的简单方法。
这是一个示例程序,用于计算在给定目录中的文件中找到的命令行中给出的字符串,并使用它们组装.CSV表:
# -*- coding: utf-8 -*-
import csv
import sys, os
output_name = "count.csv"
def find_in_file(path, string_list):
count = []
file_ = open(path)
data = file_.read()
file_.close()
for string in string_list:
count.append(data.count(string))
return count
def main():
if len(sys.argv) < 3:
print "Use %s directory_path <string1>[ string2 [...]])\n" % __package__
sys.exit(1)
target_dir = sys.argv[1]
string_list = sys.argv[2:]
csv_file = open(output_name, "wt")
writer = csv.writer(csv_file)
header = ["Filename"] + string_list
writer.writerow(header)
for filename in os.listdir(target_dir):
path = os.path.join(target_dir, filename)
if not os.path.isfile(path):
continue
line = [filename] + find_in_file(path, string_list)
writer.writerow(line)
csv_file.close()
if __name__=="__main__":
main()
答案 1 :(得分:1)
执行此操作的步骤如下:
:
字符因此,代码看起来像这样,只要您的文本文件按照您在问题中显示的方式进行格式化,并且此格式可靠地正确:
import sys, os, glob
dir_path = sys.argv[1]
if dir_path[-1] != os.sep: dir_path+=os.sep
file_list = glob.glob(dir_path+'*.txt') #use standard *NIX wildcards to get your file names, in this case, all the files with a .txt extension
with open('out_file.csv', 'w') as out_file:
for filename in file_list:
with open(filename, 'r') as in_file:
for line in in_file:
if 'STRING=SOME_STRING' in line:
out_file.write(line.split(':')[0]+'\n')
此程序将以python extract_paths.py path/to/directory
运行,并在您当前目录中为您提供名为out_file.csv
的文件。
然后可以将此文件作为CSV文件导入Excel。如果您的输入不如您建议的那样可靠,那么正则表达式可能是更好的选择。