2017-02-16 2 views
0

Основная задача: преобразовать URL-запрос в текст и выгрузить его в текстовый файл (почти полезный CSV).Python: текстовый файл заменяет разные строки в нескольких строках КАК?

Цель: чистый CSV. В нескольких строках я пытаюсь заменить несколько (разных) символов:

скобки, тильды (~), дополнительные запятые в конце каждой строки.

Я не могу найти относительно простых примеров для достижения этой цели. Ищете что-то, что можно циклически перестраивать и заменять.

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Я ожидаю, что этот файл будет большим с течением времени, поэтому не будет дружественным к памяти.

Ниже приведен код, который был создан файл:

import urllib.request 
with urllib.request.urlopen(URL1) as response: 
    data = response.read() 
decoded_data = data.decode(encoding='UTF-8') 

str_data = str(decoded_data) 
saveFile = open("test.txt",'w') 
saveFile.write(str_data) 
saveFile.close() 

Вот упрощенный пример из файла, первая строка содержит имена полей, 2-й и 3-й строка представляет собой запись.

[[ "F1", "F2", "F3", "F4", "F5", "F6"],

[ "string11", "string12", "string13", "ы ~ ring14" , "string15", "string16"],

[ "string21", "string22", "s ~ ring23", "string24", "string25", "string26"]]

ответ

1

Если вы хотите заменить символы в начале или в конце строки, используйте strip. Если символ, который вы хотите удалить, имеет произвольную позицию, вместо этого используйте replace, например: line.replace("~",""). Обратите внимание, что, в отличие от strip, вы не можете указать несколько символов в одном replace вызова, но вы можете приковать их, как это: line.replace("~","").replace(",","").replace("[","")

Просто быстро макет, что может работать для вас:

with open("text.txt", 'r') as f: 
    with open("result.txt", 'w') as new_f: 
     for line in f: 
      new_line = line.strip(" [],\n\t\r").replace("~","") 
      print(new_line) 
      new_f.write(new_line+"\n") 

после Я вижу, что тильды могут быть где угодно, а скобки и запятые обычно появляются на концах. Я также добавил «\ n», «\ t», «\ r» и пробел в strip, потому что эти символы могут (по крайней мере, «\ n» обязательно) появляться в конце каждой строки.

+0

Да, это было так. Отлично! СПАСИБО !! :-) Вау. Ручки как тильда (ы), так и скобки. – marucho21

+0

Нашел исходную причину, по которой скобки входят в текстовый файл. URL-адрес отправляется в JSON, который предназначен для передачи таблицы данных (так что столбцы и строки). не найти твердый пример, который бы это показал. Ниже я повторно разместил свой код с исправлениями. Обратите внимание, что «скруббер» выше не находится в моем исправленном коде. – marucho21

0

You может использовать простой для цикла цикл для итерации через файл. Тогда вы могли бы заменить символы в каждой строке

file = open("text.txt", "r") 
clean_txt = "" 
for line in file: 
    line = line.replace("~", "").replace("[","").replace("]","") 
    line[len(line)-1] = "" #Replace the last character of the line. 
file.close 
w = open("text.txt", "w") 
w.write(clean_txt) 
w.close 
+0

Спасибо за ввод. Он фактически удаляет все содержимое файла. Я пробовал этот подход, прежде чем опубликовать его. Когда я его заработал, он только «выполнит операцию» на первой строке ». Ищете что-то, что будет проходить через файл. – marucho21

0
#!/usr/bin/env python3 

# Note, I used the print function as a way to visually confirm the code worked. 
# the URL_call will yield a byte that has serialized data for a basic table (columns and rows, where first row are column names -- just like Excel or SQL) 

URL_call = ("http://www.zzz.com/blabla.html") 

# URLIB module & function: the request has to be first decoded from UTF-8 
import urllib.request 
with urllib.request.urlopen(URL_call) as response: 
    URL_data = response.read() 

URL_data_decoded = URL_data.decode(encoding='UTF-8') 

# use json to convert decoded response into a python structure (from a JSON structure) 
import json 
URL_data_JSON = json.loads(URL_data_decoded) 

# pandas will transition the python data structure from a "list-like" array to a table. 
import pandas as pd 
URL_data_panda = pd.DataFrame(URL_data_JSON) 

# this will create the text (in this case a CSV) file 
URL_data_panda.to_csv("test.csv") 

# The file will need the first row removed (columns are indexed coming out of the panda) 

#determine line count 
num_lines = sum(1 for line in open("test.csv")) 

print(num_lines) 

# the zero position is assigned to the first row of text. Writing from the second row (indexed as 1) get the removal done. 
lines = open("test.csv").readlines() 
open("test2.csv","w").writelines(lines[1:(num_lines)]) 


# Changes the name of the first column from zero to a normalized name. 

import fileinput 

# Note, below you could setup a back-up file, in the file input, by adding an extra argument in the parens ("test2.csv", inplace=True, backup='.bak') 
with fileinput.FileInput("test2.csv", inplace=True) as file: 
    for line in file: 
     print(line.replace("0,", "REC_NUM,"), end='') 
Смежные вопросы