2017-01-25 2 views
0

Исходный код:Напишите текст строки в файле, включая ключевые слова python?

table_start_value="\begin{table}[ht] \n\begin{center} \n\begin{tabular}{|p{2cm}|p{7cm}|p{2cm}|} \n\hline \n\multicolumn{1}{|c|}{\textbf{ID}} \& {\textbf{Title:}} & \multicolumn{1}{c|}{\textbf{Priority}}\\ \n\hline\n" 

def write_line(inf): 
    with open(inf,'w') as fwri: 
      fwri.writelines(table_start_value) 

file_src="foo.txt" 
write_line(file_src) 

Проблема: Почему blury текст появляются в файле foo.txt и как я могу написать точный текст в файле?

enter image description here Ожидаемый результат:

\begin{table}[ht] 
\begin{center} 
\begin{tabular}{|p{2cm}|p{7cm}|p{2cm}|} 
\hline 
\multicolumn{1}{|c|}{\textbf{ID}} & {\textbf{Title:}} & \multicolumn{1}{c|}{\textbf{Priority}}\\ 
\hline 

enter image description here

Спасибо для вас предложение!

+2

Если вы видите размытый текст, это не имеет ничего общего с кодом, который вы опубликовали. Проверьте настройки дисплея. – user2357112

+0

@ user2357112 это не проблема с настройкой дисплея.Я прикрепил два изображения, и вы увидите разницу – J4cK

+0

Линия начинается с «\ b», которая интерпретируется как обратное пространство. Точно так же, как «\ n» является новой строкой. Если вы хотите косой черты, вам нужно избежать первого «\» как «\\». Или вам нужно избежать всего этого. «\ t» также превращается в вкладку. Рассматривайте все это как необработанную строку. – RobertB

ответ

3

\t означает tab в тексте, поэтому вы должны использовать \\t. Существуют и другие специальные символы, такие как \n, \r, \b и т. Д. Вы должны использовать \\ с этими символами, если у вас какой точный текст в файле.

Вы также можете использовать r префикс, но с тройным """ и без \n и тогда вам не придется использовать \\

table_start_value = r"""\begin{table}[ht] 
\begin{center} 
\begin{tabular}{|p{2cm}|p{7cm}|p{2cm}|} 
\hline 
\multicolumn{1}{|c|}{\textbf{ID}} & {\textbf{Title:}} & \multicolumn{1}{c|}{\textbf{Priority}}\\ 
\hline 
""" 

def write_line(inf): 
    with open(inf,'w') as fwri: 
      fwri.writelines(table_start_value) 

file_src="foo.txt" 
write_line(file_src) 
1

Проблема заключается в строке линии table_start_value. Вы должны написать его как следующие:

table_start_value="\\begin{table}[ht] \n\\begin{center} \n\\begin{tabular}{|p{2cm}|p{7cm}|p{2cm}|} \n\\hline \n\\multicolumn{1}{|c|}{\\textbf{ID}} & {\\textbf{Title:}} & \\multicolumn{1}{c|}{\\textbf{Priority}}\\\\ \n\\hline\n" 

т.е. добавление «\» для каждой команды латекса.

+0

Да. Должно быть «\\ b» не «\\\ b». – RobertB

+0

Да, некоторая копия пасты .... должно быть в порядке – fedepad

1

Многие комбинации символов, начинающиеся с \, являются специальными в python. Сделайте это, чтобы unmangle выходного файла:

with open(inf,'w') as fwri: 
    replaced_string = table_start_value.replace("\b", "\\b").replace("\t", "\\t") 
    fwri.writelines(replaced_string) 
1

Ваш вопрос с обратной косой черты: \.

В python обратная косая черта (почти) всегда влияет на следующий символ, который появляется сразу после него, изменяя значение этого символа. Вы можете увидеть это, когда используете строку \n и не видите буквальную обратную косую черту, за которой следует буква «n» - вместо этого вы видите новую строку. Это связано с тем, что обратная косая черта изменяет значение «n», чтобы вместо этого стать новой линией. Но «n» - это не единственный характер, который затронут таким образом.

Если вы хотите сохранить буквальное обратную косую черту в строке, вам нужно обратной косой черты обратной косой черты и, например, так: my_string = "Here's a SINGLE backslash: \\"

Для каждой обратной косой черты в вашей строке, которые вы хотите, чтобы появиться в буквальном смысле, что вам нужно для обратной косой черты.

1

Измените свой код так, чтобы вы использовали необработанную строку.

table_start_value= r"\begin{tab.. 
+1

у вас возникнет проблема с '\ n', потому что она будет написана как текст' \ n' не как новая строка. – furas